2012-01-17 3 views
3

я следующий код в вызываемом статические методы класса, которые архивируются в баночке:FileNotFoundException. Работает и не работает одновременно?

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

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

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

Второй System.out (2) говорит:

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

Line 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/classworkflow.

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

+0

Это помогло бы иметь код для конструктора 'POSDictionary', поскольку там выбрано исключение. – Viruzzo

ответ

4

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

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

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

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

Смежные вопросы