Запись BufferedWriter в консоль вместо текстового файла

Это содержимое конструктора класса, который вызывается методом main.

    File f = null;
    Scanner s;
    try {
        f = new File(getClass().getResource("/LOL.txt").toURI());
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
    try {
        s = new Scanner(f);
        while(s.hasNextLine()) System.out.println(s.nextLine());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    try {
    FileWriter fw = new FileWriter(f.getAbsoluteFile(), false);
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write("LOL");
    bw.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

Вывод в консоль:

LOL

Содержимое файла остается неизменным даже после повторных запусков. Моя IDE - затмение

2 ответа

Вы параметризуете свой FileWriter с boolean append установить как false,

Следовательно, один и тот же файл будет записываться каждый раз, когда выполняется данный конструктор, и "LOL" будет напечатано в нем.

Перед печатью "LOL", Scanner читает каждую строку и печатает ее, следовательно, LOL напечатано в нашей системе.

Также обратите внимание, что вы, вероятно, хотите объявить свой FileWriter а также BufferedWriter вне try блок, так что вы можете промыть и закрыть их в finally блок.

Этот пост содержит только первоначальный вопрос, поскольку все исправлено, чтобы избежать нескольких связанных с ресурсами ошибок. Предполагается Java 6 или ниже.

Я не должен получить никакого голоса, поэтому, пожалуйста, не надо;)

package so39452286;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
    new Main().run();
  }

  public void run() {
    try {
      File file = new File(getClass().getResource("/LOL.txt").toURI());
      Scanner scanner = null;
      try {
        scanner = new Scanner(file);
        while (scanner.hasNextLine()) {
          System.out.println(scanner.nextLine());
        }
      } finally {
        if (scanner != null) {
          scanner.close();
        }
      }
      Writer writer = null; // Holds the main resource, not the wrapping ones.
      try {
        writer = new FileWriter(file.getAbsolutePath(), false);
        BufferedWriter bw = new BufferedWriter(writer);
        bw.write("LOL");
        bw.flush(); // You forgot to flush. Ok, close() does it, but it's always better to be explicit about it.
      } finally {
        if (writer != null) {
          writer.close();
        }
      }
    } catch (Exception e) {
      // Do something with e.
      e.printStackTrace(System.err);
    }
  }
}
Другие вопросы по тегам