【问题标题】:PrintWriter issuesPrintWriter 问题
【发布时间】:2018-04-21 10:24:29
【问题描述】:

我正在编写一个程序,旨在 ping 在线数据库,并将状态日志写入 .txt。

每当我运行程序并打开 .txt 文件时,时间戳都会告诉我它刚刚更改,但它是空白的。

public static void printToFile(String text) {
    String fileName = "log.txt";
    PrintWriter outputStream = null;

    try {
        outputStream = new PrintWriter(fileName);
        System.out.println("Printing to txt");
        outputStream.println("Debug");
    } catch (FileNotFoundException e) {
        System.out.println("Error opening the file " + fileName);
        outputStream.close();
    }
}

public static void pingDatabase(Connection conn) throws SQLException, InterruptedException {
    Date timeStamp = new Date(System.currentTimeMillis());
    do {
        if (conn.isValid(10000)) {
            System.out.println("Printtofile called");
            printToFile("Database is Online");
        } else {
            printToFile("Database is Offline");
        }
        Thread.sleep(10000);
    } while (true);

}

【问题讨论】:

    标签: java outputstream


    【解决方案1】:

    除非出现异常,否则您不会关闭或因此刷新您的 PrintWriter

    根据您当前的代码,您还需要以附加模式打开输出文件,但保持打开状态会更有意义。每条消息打开和关闭文件的开销是巨大的。

    【讨论】:

    • @Roushan 和什么答案一样?我在这里看到的唯一相同的答案是依赖于我提供的信息。
    • 你提供了哪些信息?我不明白
    • @Roushan 这就是我所说的,在我的回答中,在我对你的回答的评论中,这似乎也是 yiu 声称的所有权,而你没有。如果您还有其他要说明的问题,请提出。目前这只是噪音。
    • @downvoter 好的,这是什么?您不需要关闭或刷新PrintWriter?他不需要以附加模式打开他的文件吗?保持开放不是更有意义吗?每条消息的打开和关闭开销不是很大吗?请。
    【解决方案2】:

    由于它是日志,您可能需要附加内容而不是每次都写入,并且需要在写入后将内容刷新到日志文件。

    public static void printToFile(String text)  {
            String fileName = "log.txt";
            PrintWriter outputStream=null;
            try {
                 outputStream =new PrintWriter(new FileWriter(fileName,true));
                System.out.println("Printing to txt");
                outputStream.append(text+"\n");
                outputStream.flush();//flushing to file
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("Error opening the file " + fileName);
    
            }
            finally{
                  outputStream.close();
            }
            }
    

    new FileWriter(fileName,true) FileWriter 是 OutPutStreamWriter 的子类,true 用于以追加模式打开

    【讨论】:

    • 请解释为什么在catch 块中关闭流是必要的,但在其他任何时候都不需要,以及为什么IOException 只能是由于打开文件时出现问题而不是其他原因。
    • @EJP 刚刚完成了一个部分,所以我会继续努力,并且还在寻找那个并且你被否决了,你也会留下评论
    • 您不知道谁对您的答案投了反对票。您的编辑假定没有引发异常。
    • 我知道,在没有评论的情况下投反对票,这真是一场噩梦,当时就像一分钟前一样回答
    • @EJP FileNotFoundException 还不够,因为 PrintWriter 需要 IOException 才能捕获
    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 2012-07-07
    • 1970-01-01
    相关资源
    最近更新 更多