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

java.io.FileNotFoundException(打开的文件太多),java,file-io,Java,File Io,我使用以下代码将一些数据写入文件: BufferedWriter writer = null; try { writer = new BufferedWriter(new FileWriter(file)); writer.write(...); writer.flush(); } finally { if (writer != null) writer.close(); } 多次调用该方法后,我得到了一个FileNotFoundExceptio

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

BufferedWriter writer = null;
try {
    writer = new BufferedWriter(new FileWriter(file));
    writer.write(...);
    writer.flush();
}
finally {
    if (writer != null)
        writer.close();
}
多次调用该方法后,我得到了一个FileNotFoundException,因为打开的文件太多

显然,当我关闭writer流时,java不会关闭文件句柄。单独关闭FileWriter没有帮助


我能做些什么来强制java关闭文件吗?

不,当您关闭编写器时,java会关闭文件句柄。它实际上是用计算机构建的。因此,它一定是别的东西。显示堆栈跟踪。

否,当您关闭写入程序时,Java会关闭文件句柄。它实际上是用计算机构建的。因此,它一定是别的东西。显示堆栈跟踪。

请参阅关于写入文件的好提示。。注意Anons回复中的最后一块

请参见关于写入文件的好提示。。注意Anons回复中的最后一块

BufferedWriter关闭底层流。这可能是一个多线程问题。您可以保留一个FileOutputStream实例并将其关闭。比如: java.io.FileOutputStream out=新的java.io.FileOutputStream(文件); 试一试{ //制作缓冲写入程序等。 }最后{ out.close(); }
BufferedWriter关闭底层流。这可能是一个多线程问题。您可以保留一个FileOutputStream实例并将其关闭。比如: java.io.FileOutputStream out=新的java.io.FileOutputStream(文件); 试一试{ //制作缓冲写入程序等。 }最后{ out.close(); }
您的代码看起来不错。它可能是应用程序中泄漏文件句柄的另一部分


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

您的代码看起来不错。它可能是应用程序中泄漏文件句柄的另一部分


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

您可以发布stacktrace吗?您是否在多线程环境中使用此功能?请尝试添加
Try。。捕获周围的
writer.close()`也可以,以捕获那里的任何问题。您可以发布stacktrace吗?您是否在多线程环境中使用此功能?请尝试添加
Try。。抓住周围的人,抓住那里的任何问题。你是对的。如果我只运行我发布的代码,问题就不会发生。尽管它抛出了异常,因为没有更多的文件可以打开了。看来我得在别的地方找到漏洞。你说得对。如果我只运行我发布的代码,问题就不会发生。尽管它抛出了异常,因为没有更多的文件可以打开了。似乎我必须在其他地方找到漏洞。堆栈跟踪只指向代码,我发布了。但你是对的,问题出在其他地方。堆栈跟踪只指向代码,我发布了。但你是对的,问题出在别的地方。
java.io.FileOutputStream out = new java.io.FileOutputStream(file);
try {
  // make buffered writer, etc.
} finally {
  out.close();
}