FileNotFoundException. Работает и не работает одновременно? - PullRequest
3 голосов
/ 17 января 2012

У меня есть следующий код в статическом классе с именем Methods, который заархивирован в банке:

System.out.println(Methods.class.getResource("tagdict.txt")); // 1
URL test = Methods.class.getResource("tagdict.txt");          // 2
System.out.println(test.getPath());                           // 3
TagDictionary dict = new POSDictionary(test.getPath());       // 4

Первый System.out (1) говорит:

rsrc:de/fhg/scai/bio/harsha/classificationworkflow/tagdict.txt

секунда System.out (2) говорит:

de/fhg/scai/bio/harsha/classificationworkflow/tagdict.txt

Строка 4 выбрасывает

java.io.FileNotFoundException: de/fhg/scai/bio/harsha/classificationworkflow/tagdict.txt (No such file or directory)

Файл tagdict.txt помещается в тот же пакет, что и Method.class, чтоde/fhg/scai/bio/harsha/classificationworkflow.

Я не понимаю, почему в строке 4 выбрасывается FileNotFoundException, хотя файл был найден уже внутри банки.

1 Ответ

4 голосов
/ 17 января 2012

В строке 3 просто выводится компонент пути URL-адреса, возвращаемого getResource.На самом деле он не проверяет, представляет ли этот путь реальный файл на диске.

Похоже, что конструктор POSDictionary пытается создать File, используя переданную ему строку пути, и этот путь нефактически не представляет файл на диске, поэтому выбрасывает исключение.

Я не понимаю, почему в строке 4 выбрасывается исключение FileNotFoundException, даже если файл был найден уже внутри фляги.

Потому что если ресурс находится в JAR, то это не файл.Доступ к таким ресурсам возможен только путем открытия входных потоков непосредственно из объекта URL или с помощью getResourceAsStream() вместо getResource().К ним нельзя получить доступ с помощью java.io.File, поскольку они не являются реальными дисковыми файлами.

...