Исключение FileNotFoundException даже при наличии файла

#java #java.util.scanner #filenotfoundexception

#java #java.util.scanner #исключение filenotfoundexception

Вопрос:

 public StormAnalysis(){
    try {       
        fScanner = new Scanner(new File("tracks1949to2010_epa.txt"));
        while(fScanner.hasNextLine()){
            System.out.println(fScanner.nextLine());
        }
    } catch (FileNotFoundException e) {
        System.out.println("File not found. Try placing the tracks1949to2010_epa.txt in the same folder as StormAnalysis.java");    
        e.printStackTrace();
    }

}
  

Приведенный выше мой код (и у меня также есть изображение ошибки :
http://folk.uio.no/arnabkd/test/images/error-code-task.jpg

Как вы можете видеть, текстовый файл находится в той же папке, что и StormAnalysis.java файл. Кроме того, код работает, если я изменяю путь к файлу на «weather.dat» (который был указан как другая задача / проблема).

Любые идеи будут оценены!

Ответ №1:

Файла там нет. Если бы это было так, это не вызвало бы исключения 🙂

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

В качестве альтернативы, чтобы найти текущий каталог:

 String cwd = new File(".").getAbsolutePath();
  

Удачного кодирования.

Комментарии:

1. @Arnab, поскольку вы используете относительный путь к File конструктору, вычисляемый путь всегда будет относиться к рабочему каталогу исполняемого файла java / javaw. Вам нужно будет изменить вызов конструктора, чтобы включить любые подкаталоги, в которых присутствует ваш файл.

Ответ №2:

Eclipse копирует (только) файлы класса в binclasses каталог по умолчанию (если это не было изменено на другой каталог), перед запуском приложения Java. Для всех практических целей этот каталог отличается от src каталога, в котором присутствует входной файл. Вам нужно будет настроить свойства сборки проекта в Eclipse, чтобы скопировать входной файл (или все файлы типа .txt) также в выходной каталог. Это сделает файл доступным в том же каталоге, где находится файл класса, что позволит прочитать файл.

Ответ №3:

Eclipse cwd — это папка проекта, расположенная на один уровень выше bin и src.

 Directory of ...eclipse-workspaceFile IO
05/30/2018  07:52 PM    <DIR>          bin
05/30/2018  07:48 PM               148 sample.txt
05/30/2018  07:46 PM    <DIR>          src

testFile = new File("Sample.txt");
System.out.println(testFile.getAbsolutePath());