Запись 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);
}
}
}