FileNotFoundException при создании сканера в Eclipse с Java

Я получаю FileNotFoundException при запуске следующего кода Java 6 в Eclipse (Indigo) на Snow Leopard:

import java.io.*;
import java.util.*;

public class readFile {

    public static void main(String[] args) {

        Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9

    }
}

Исключением является

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Unhandled exception type FileNotFoundException

    at readFile.main(readFile.java:9)

Моя текущая рабочая область — /Users/daniel/pr/java. Он содержит только один проект (readFile), а файловая иерархия выглядит так:

- readFile
    - src
        - (default package)
            - readFile.java
    - JRE System Library [JavaSE-1.6]
    - myfile.txt

Прочитав несколько очень похожих вопросов, я попытался

  • размещение копий myfile.txt в каталогах проекта, bin, src и workspace, а также в моих домашних и корневых папках
  • определение рабочего каталога и использование относительного пути
  • ручная настройка рабочей области через «Конфигурации запуска> Аргументы> Рабочий каталог» в Eclipse
  • запуск программы с помощью средства запуска Java из командной строки в каталогах bin, readFile, src и java (с копиями myfile.txt во всех этих местах)
  • удаление расширения файла и/или удлинение имени файла (выше некоторого предполагаемого минимального ограничения символов) и
  • проверка разрешений myfile.txt (теперь они rw-r--r--).

Я в растерянности. В чем может быть проблема? (Спасибо за чтение!)


person Daniel Jordan    schedule 04.05.2012    source источник


Ответы (3)


Исключение говорит вам о проблеме.

Код, который у вас есть в вашем основном файле, может генерировать исключение FileNotFoundException, поэтому вам необходимо учитывать это в своем коде, либо объявив в сигнатуре метода, что это исключение может быть брошено, либо окружив код Попробуйте поймать:

Объявление:

public static void main(String[] args) throws FileNotFoundException{

    Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9

}

Или с помощью try/catch

public static void main(String[] args) {
    try { 
        Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9
    } catch (FileNotFoundException e) {
        //do something with e, or handle this case
    }
}

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

Если вы используете try/catch, вы можете справиться с этой ситуацией, зарегистрировав ошибку, повторив попытку и т. д.

Вы можете взглянуть на: http://docs.oracle.com/javase/tutorial/essential/exceptions/, чтобы узнать об обработке исключений в Java, это будет очень полезно.

person pcalcao    schedule 04.05.2012
comment
Нужны ли «броски» во втором методе? - person NominSim; 04.05.2012
comment
UPS! Копировать/вставить с первого... исправлено! Спасибо. - person pcalcao; 04.05.2012

FileNotFoundException является проверенным исключением! Вы должны поймать исключение...

 public static void main(String[] args) {
     try {
        Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9
     } catch(FileNotFoundException ex) {
         //Handle exception code ...
     }
 }
person aleroot    schedule 04.05.2012

"/Users/daniel/pr/java/readFile/myfile.txt"

Разве это не должно быть:

"/users/daniel/pr/java/readFile/myfile.txt"
person Andrew Thompson    schedule 04.05.2012
comment
Каталог пользователей на моем Mac написан с большой буквы. Хотя, может, и не на других. - person Daniel Jordan; 04.05.2012