在Java中输出到txt文件时,系统中打开的文件太多

时间:2014-06-21 18:55:52

标签: java eclipse filenotfoundexception

我正在尝试创建一个程序,该程序通过文本文件并使用Eclipse计算Java中的单词用法。该程序有效,但我想将输出值保存到文本文件中。我正在使用这段代码来做到这一点:

PrintStream out = new PrintStream(new FileOutputStream("output.txt"));
System.setOut(out);

我用过

throws FileNotFoundException

去除文件未找到的异常。

当我运行程序时,出现错误

Exception in thread "main" java.io.FileNotFoundException: output.txt 
    (Too many open files in system)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
at java.io.FileOutputStream.<init>(FileOutputStream.java:110)
at nGram.HashMapFun.main(HashMapFun.java:66)

我在java项目中创建了一个output.txt文件,所以我不知道为什么程序找不到它。输出来自HashMap。

我该如何解决这个问题?

提前致谢。

3 个答案:

答案 0 :(得分:1)

  

我用过    throws FileNotFoundException
   摆脱文件未找到的异常。

听着,使用throws不要摆脱异常。

您需要捕获抛出的异常。但只要存在异常,就不能继续从那一点开始,直到您使用条件语句跳过该阶段。

try {
   // code here
} catch (Exception e) {
   // message here
} 

UNIX OS和其他操作系统会将每个进程限制为一次要加载的多个文件。所以,我认为你在使用Reader或Scanner的地方需要关闭它们。

使用此

scanner.Close(); 

我不知道你的fileReader代码扫描程序。所以,你可以用它重新替换它。一旦您使用此代码,您已完成工作的文件将被关闭,并且它的链接将被关闭。这样就可以打开一个新文件了。

答案 1 :(得分:1)

import java.io. *; 公共课你好 {

public static void main(String[] args) 
{
    try
    {
        /*the File class uses a constructor File("absolute URI")
         * example linux/OSX/Unix
         * File("home/user/workspace/hello.txt);
         * 
         * example Windows
         * File("C:/Documents/hello);+
         */

        File file = new File("/home/nirban/hello.txt");

        FileOutputStream fis = new FileOutputStream(file);

        PrintStream out = new PrintStream(fis);
        System.setOut(out);
        out.println("Hello this is my file");
        out.close();
        fis.close();        
    }
    catch(FileNotFoundException e)
    {
            e.printStackTrace();
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }
}

}

操作后需要关闭输入/输出流, 如果流未关闭,则JVM将文件保留在jvm进程中 检查LINUX文件是否存在

$ ps -e | grep java

(pid)? 00:03:42 java

$ lsof -p(pid)

这将列出JVM运行的所有文件和进程

谢谢,享受.................

答案 2 :(得分:0)

关闭FileOutputStream和PrintStream。它会解决你的问题。请尝试下面的代码

FileOutputStream fos = new FileOutputStream("output.txt");

PrintStream out = new PrintStream(fos);
System.setOut(out);

out.close();
fos.close();