Слишком много файлов открываются в системе при выводе в текстовый файл на Java [duplicate]

1

Я пытаюсь сделать программу, которая проходит через текстовый файл и учитывает использование слов в Java, используя Eclipse. Программа работает, но я хочу сохранить выходные значения в текстовом файле. Я использую этот бит кода для этого:

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)

Я создал файл output.txt в проекте java, поэтому не знаю, почему программа не может его найти. Выход из HashMap.

Как это исправить?

Заранее спасибо.

  • 1
    Вы закрываете каждый файл после того, как открываете его для чтения / подсчета слов? Вы закрываете буферы? Покажите нам весь код.
  • 3
    Для каждого процесса существует ограничение на количество открытых файлов, ваш код, похоже, не закрывает файлы и продолжает открывать много файлов, выходящих за этот предел
Показать ещё 3 комментария
Теги:
filenotfoundexception

3 ответа

1

import java.io. *; public class Hello {

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

Спасибо и наслаждайтесь.................

1

я использовал
throws FileNotFoundException
чтобы избавиться от не найденного исключения.

Слушайте, используя throws не избавляйтесь от Excetion.

Вам нужно поймать заброшенное исключение. Но пока существует исключение, вы не можете продолжать с этого момента, пока вы не пропустите этот этап, используя условную инструкцию.

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

ОС UNIX и такая другая ОС ограничивали бы каждый процесс несколькими файлами, которые будут загружаться за раз. Итак, я думаю, где вы используете Reader или Scanner, вам нужно закрыть их.

Использовать это

scanner.Close(); 

Я не знаю вашего сканера кода fileReader. Таким образом, вы можете повторить это. После того, как вы используете этот код, файл, с которым вы закончили работу, будет закрыт, и ссылка на него будет закрыта. Таким образом, вы можете открыть новый файл.

0

Закройте FileOutputStream и PrintStream. Это решит вашу проблему. Попробуйте ниже код

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню