长时间打开和关闭相同文件多次打开和关闭打开文件

Din*_*esh 6 java performance file

File无论何时在JTextArea字段中发生任何内容更改,我都会写信.我决定每次根据更改事件打开和关闭文件内容.

就像是 ,

public void addToLogFile(String changeContent) {
    try {
        PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(currentLogFile,true)));
        pw.print(changeContent);
        pw.close();
    } catch (FileNotFoundException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为可能是在初始阶段打开它并在需要时转储内容,而不是每次打开和关闭文件.最后在结束阶段关闭它.

在计划的初始阶段:

PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(currentLogFile,true)));
Run Code Online (Sandbox Code Playgroud)

然后在代码中的某处,无论何时需要,

pw.print(changeContent); // Most frequent usage
Run Code Online (Sandbox Code Playgroud)

在计划的最后阶段:

pw.close();
Run Code Online (Sandbox Code Playgroud)

哪一个会更有效率?在什么条件下,我必须选择一个吗?

ki9*_*i92 5

肯定更有效的方法是打开文件一次。每次打开文件都非常昂贵。

一种可能有用的情况是,文件的新条目长时间出现一次,因此操作系统不需要保留打开的文件处理程序。

我会考虑每次打开和关闭它的另一种情况是,写操作并不那么频繁,而您想让其他进程将其写入文件。或者,也许当您想确保每个条目在写完之后才可见,但是您应该简单地刷新缓冲区。