java.io.FileNotFoundException(打开的文件太多)

时间:2010-11-04 09:37:29

标签: java file-io

我使用以下代码将一些数据写入文件:

BufferedWriter writer = null;
try {
    writer = new BufferedWriter(new FileWriter(file));
    writer.write(...);
    writer.flush();
}
finally {
    if (writer != null)
        writer.close();
}

多次调用该方法后,我收到了一个FileNotFoundException,因为打开的文件太多了。

显然,当我关闭编写器流时,java不会关闭文件句柄。单独关闭FileWriter无济于事。

有没有?我可以强制java关闭文件吗?

4 个答案:

答案 0 :(得分:2)

您的代码看起来很好。它可能是应用程序的另一部分,即泄漏文件句柄。

您可以使用Linux上的lsof或Solaris上的pfiles来监控文件句柄。在Windows上,您可以使用ProcessExplorer

答案 1 :(得分:1)

不,Java会在关闭writer时关闭文件句柄。它实际上是使用Decorator pattern构建的。因此,它必须是别的东西。显示堆栈跟踪。

答案 2 :(得分:1)

请参阅this thread关于写入文件的信息,那里有很好的提示..注意Anons回复中的finally块。

答案 3 :(得分:0)

BufferedWriter关闭基础流。可能这是一个多线程问题。您可以保留FileOutputStream的实例并将其关闭。就像是:

java.io.FileOutputStream out = new java.io.FileOutputStream(file);
try {
  // make buffered writer, etc.
} finally {
  out.close();
}