在我的程序中,我有一个循环,它扫描一堆文件并读取它们的内容。问题发生在大约1500个文件的迭代过程中,似乎无法重现(或者我无法理解)。问题是:
java.io.FileNotFoundException: /path/to/file//myFile (Too many open files)
异常指向此方法:
private static String readFileAsRawString(File f) throws IOException {
FileInputStream stream = new FileInputStream(f); // <------------Stacktrace
try{
FileChannel fc = stream.getChannel();
MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
return Charset.defaultCharset().decode(bb).toString();
} finally {
stream.close();
}
}
我在QA中对20000个文件运行了这个方法,看起来没有问题。
你看到上面我粘贴的代码有什么问题可能导致这个问题吗?
FileChannel
- 获取文件的通道可能会创建一个新的文件句柄。 - millimoose