java - 如何在java中读取文本文件的第一行并打印出来?

标签 java bufferedreader

我想通过写入文件来保存状态,然后使用 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());
}

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

最佳答案

当使用 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(当然还有 Java 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();
        }
    }

关于java - 如何在java中读取文本文件的第一行并打印出来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22728961/

相关文章:

java - Android "onRequestPermissionsResult"未被调用

jvm - 为什么 JVM 在启动时随着时间的推移执行相同的程序会更快?

java - 如何根据外键值限制 'insert into'?

java - 在Java中通过Inputstream读取内容时删除列名

java - 如何正确读取http请求?

java - 如何在约束布局中以编程方式移动 View (按钮)?

java - findbugs和数据库密码安全问题

java - 从项目目录中的文件夹中读取文件

java - 字符串在同一行出现的次数

java - 如何从使用 Runtime.getRuntime().exec(cmdLine) 执行的 Java 程序中的 netcat 监听器子进程获取 std 输出?