私のプログラムでは、一連のファイルをスキャンしてその内容を読み取るループがあります。この問題は、約 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 で 20,000 個以上のファイルに対して実行しましたが、問題はないようです。
この問題の原因となる、上に貼り付けたコードに何か問題がありますか?