【问题标题】:How to read the first line of a text file in java and print it out?如何在java中读取文本文件的第一行并打印出来?
【发布时间】:2014-03-29 08:49:43
【问题描述】:

我想通过写入文件来保存状态,然后稍后使用bufferedReader 读取文件以再次获取状态。这是我的代码:

public static void main(String[] args) throws IOException{

   FileWriter fw = new FileWriter("C:\\Users\\Nicolas\\Desktop\\save.txt");
   BufferedWriter save = new BufferedWriter(fw);

   save.write("helloWorld");

   BufferedReader r = new BufferedReader(new FileReader("C:\\Users\\Nicolas\\Desktop\\save.txt"));

   System.out.println(r.readLine());

   save.close();        
}

如果我按下运行,我会打印出null。我试过了:

if(r.readLine() != null){
    System.out.println(r.readLine());
}

但从逻辑上讲,它现在什么也没打印出来。我不知道我在这里做错了什么。你能帮帮我吗?

【问题讨论】:

标签: java bufferedreader


【解决方案1】:

当使用 BufferedWriter 写入文件时,内容不会直接写入磁盘,因为它显然是缓冲的。您应该按照@ludo_rj 在他的回答中建议的那样刷新内容。

更好的是尽早关闭编写器,这将自动刷新内容。顺便说一句,关闭阅读器也是必要的。

您应该使用以下机制(我已将该方法分为几种方法以使其更清晰):

public class SaveStateTesing {

    private static final String FILE_NAME = "C:\\Users\\Nicolas\\Desktop\\save.txt";

    public static void main(String[] args) throws IOException {
        saveState("helloWorld", FILE_NAME);
        String state = readState(FILE_NAME);
        System.out.println(state);
    }

    private static void saveState(String state, String fileName) throws IOException {
        try(PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(fileName)))) {
            writer.println(state);
        }
    }

    private static String readState(String fileName) throws IOException {
        try(BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
            return reader.readLine();
        }
    }

}

请注意,我使用了 try-with-resource 语句,该语句仅在 Java 7(当然还有 8)中可用。如果你在旧的 Java 版本上运行它,你必须编写如下方法:

    private static void saveState(String state, String fileName) throws IOException {
        PrintWriter writer = null;
        try {
            writer = new PrintWriter(new BufferedWriter(new FileWriter(fileName)));
            writer.println(state);
        } finally {
            if (writer != null)
                writer.close();
        }
    }

    private static String readState(String fileName) throws IOException {
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader(fileName));
            return reader.readLine();
        } finally {
            if (reader != null)
                reader.close();
        }
    }

【讨论】:

    【解决方案2】:
      // Write to file      
      FileWriter fw = new FileWriter("C:\\Users\\Nicolas\\Desktop\\save.txt");
      BufferedWriter save = new BufferedWriter(fw);
    
      save.write("example");
      save.flush()
    
      // read as stream
      BufferedReader r = new BufferedReader(new FileReader("C:\\Users\\Nicolas\\Desktop\\save.txt"));
      System.out.println(r.readLine());
    
      save.close();
    

    【讨论】:

      【解决方案3】:

      BufferedWriter 会缓冲输出,直到您刷新写入的流,因此您需要通过关闭文件或使用 save.flush() 来刷新流。

       public static void main(String[] args) throws IOException {
      
              FileWriter fw = new FileWriter("C:\\Users\\Nicolas\\Desktop\\save.txt");
              BufferedWriter save = new BufferedWriter(fw);
      
              save.write("helloWorld");
              save.flush();  // this writes the bytes in the stream to the file.
      
              BufferedReader r = new BufferedReader(new FileReader("C:\\Users\\Nicolas\\Desktop\\save.txt"));
      
              System.out.println(r.readLine());
      
              save.close();
          }
      

      【讨论】:

      • 我认为使用 r.close(); 读取后 BufferedReader 也应该需要关闭;
      • @JunaidHassan 应该是的,并且应该处理异常,但这是另一个问题。这使它工作,但并不完美。
      • 是的,你明白了,是的,异常也应该被捕获
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多