Java BufferedWriter IOException“打开的文件太多”

时间:2012-10-15 18:58:42

标签: java

  

可能重复:
  Java Too Many Open Files

这不是重复,提到的问题不同,只有标题相同,请仔细阅读

这是我的文件写入功能

 public static void WriteLog(String LogLine) {
    String filePath = CommonClass.ReadPropertiesFile("LogFilepath");
    BufferedWriter out = null;
    try {
        // Create file
        FileWriter fstream = new FileWriter(filePath, true);
        out = new BufferedWriter(fstream);
        out.write(LogLine + "\r\n");

    } catch (Exception e) {//Catch exception if any
        System.err.println("Error: " + e.getMessage());
    } finally {
        //Close the output stream
        if (out != null) {
            try {
                out.write("Closing stream\r\n");
                out.close();

            } catch (IOException ex) {
                System.err.println("Error Closing stream: " + ex.getMessage());
                Logger.getLogger(LogWritter.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

我也看过this question但它似乎没有帮助,如果close是阻塞调用,那么它不应该给出这个问题。

但是当我过于频繁地调用WriteLog函数时,即在循环中我得到了这个错误:

Error:  (No such file or directory)
Could not load properties File, Exception: (Too many open files), 
Error:  (No such file or directory)
Could not load properties File, Exception: (Too many open files), 

在一些特定数量的呼叫之后,在每次后续呼叫中,我都会继续收到此错误,并且文件中不再写入文本。任何人都可以告诉我我完全困惑的原因。

提前致谢

3 个答案:

答案 0 :(得分:3)

查看ReadPropertiesFile()

CommonClass.ReadPropertiesFile("LogFilepath");

我想缺少一个close()......

为:

properties.load( new FileInputStream( PropertiesFilePath ));

更好:

InputStream is = new FileInputStream( PropertiesFilePath );
properties.load( is );
is.close();

但AMHO每次运行时可以读取一次PropertiesFile,而不是每次都需要一个属性值

答案 1 :(得分:2)

只需阅读一次属性文件即可。

private static String filePath = CommonClass.ReadPropertiesFile("LogFilepath");
public static void WriteLog(String LogLine) {
    ...

CommonClass.ReadPropertiesFile背后的代码很可能是错误的。

答案 2 :(得分:0)

尝试关闭文件:

        fstream.close();

我已经使用您的代码对其进行了测试。