简体   繁体   English

使用BufferedReader和ScheduledExecutor进行日志

[英]Log using BufferedReader and ScheduledExecutor

I'm currently studying for my JAVA SE OCP Certification so and playing around with things to learn. 我目前正在为获得JAVA SE OCP认证而学习,并且正在学习一些东西。

I'm currently on IO chapter. 我目前在IO一章。 I'm trying to combine a ScheduledExecutor with a BufferedWriter 我正在尝试将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);
}

I expected to write the LocalTime every second on a new line on my TestFile but this IOException shows up: 我希望每秒钟在我的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$0(Worksheet.java:56)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) {...}

Try with: 尝试:

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();
    }

The true parameter in the FileWriter will append each new line to the existing file, instead of creating a new file. FileWritertrue参数会将每行添加到现有文件,而不是创建新文件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM