使用 BufferedReader 和 ScheduledExecutor 记录日志
Log using BufferedReader and ScheduledExecutor
我目前正在学习我的 JAVA SE OCP 认证,并尝试学习一些东西。
我目前正在阅读 IO 章节。我正在尝试将 ScheduledExecutor 与 BufferedWriter
结合起来
ScheduledExecutorService service = null;
try (BufferedWriter bw = new BufferedWriter(new FileWriter(testFile))) {
service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(() -> {
try {
bw.write("Curr Time: " + LocalTime.now());
} catch (IOException e) {
e.printStackTrace();
}
}, 1, 1, TimeUnit.SECONDS);
}
我希望每秒在我的 TestFile 上的一个新行上写入 LocalTime,但是出现了这个 IOException:
java.io.IOException: Stream closed
at java.io.BufferedWriter.ensureOpen(BufferedWriter.java:116)
at java.io.BufferedWriter.write(BufferedWriter.java:221)
at java.io.Writer.write(Writer.java:157)
at Worksheet.lambda$main[=11=](Worksheet.java:56)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) {...}
试试:
ScheduledExecutorService service = null;
service = Executors.newSingleThreadScheduledExecutor();
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(testFile, true));
service.scheduleAtFixedRate(() -> {
try {
bw.write("Curr Time: " + LocalTime.now() + "\n");
bw.flush();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}, 1, 1, TimeUnit.SECONDS);
} catch (IOException ioe) {
ioe.printStackTrace();
}
FileWriter
中的 true
参数会将每个新行附加到现有文件,而不是创建新文件。
我目前正在学习我的 JAVA SE OCP 认证,并尝试学习一些东西。
我目前正在阅读 IO 章节。我正在尝试将 ScheduledExecutor 与 BufferedWriter
结合起来ScheduledExecutorService service = null;
try (BufferedWriter bw = new BufferedWriter(new FileWriter(testFile))) {
service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(() -> {
try {
bw.write("Curr Time: " + LocalTime.now());
} catch (IOException e) {
e.printStackTrace();
}
}, 1, 1, TimeUnit.SECONDS);
}
我希望每秒在我的 TestFile 上的一个新行上写入 LocalTime,但是出现了这个 IOException:
java.io.IOException: Stream closed
at java.io.BufferedWriter.ensureOpen(BufferedWriter.java:116)
at java.io.BufferedWriter.write(BufferedWriter.java:221)
at java.io.Writer.write(Writer.java:157)
at Worksheet.lambda$main[=11=](Worksheet.java:56)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) {...}
试试:
ScheduledExecutorService service = null;
service = Executors.newSingleThreadScheduledExecutor();
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(testFile, true));
service.scheduleAtFixedRate(() -> {
try {
bw.write("Curr Time: " + LocalTime.now() + "\n");
bw.flush();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}, 1, 1, TimeUnit.SECONDS);
} catch (IOException ioe) {
ioe.printStackTrace();
}
FileWriter
中的 true
参数会将每个新行附加到现有文件,而不是创建新文件。