Как прочитать первую строку текстового файла в Java и распечатать его?

1

Я хочу сохранить состояние, записав в файл, а затем снова прочитайте файл с 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());
}

Но логически это ничего не выводит. Я не знаю, что я делаю неправильно здесь. Не могли бы вы мне помочь?

Теги:
bufferedreader

3 ответа

0
Лучший ответ

При записи в файл с 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();
        }
    }
0

Буфер 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();
    }
  • 0
    Я думаю, что BufferedReader также должен быть закрыт после чтения с помощью r.close ();
  • 0
    @JunaidHassan Должно быть, да, а также исключения должны быть обработаны, но это другая проблема. Это работает, но не идеально.
Показать ещё 1 комментарий
0
  // 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();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню