Исключение filenotfoundexception. Работает и не работает одновременно?
У меня есть следующий код в статическом классе под названием Methods, который архивируется в jar:
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
.
FileNotFoundException
, хотя файл был найден уже внутри банки.1 ответ:
Строка 3 просто выводит компонент пути URL-адреса, возвращенного
getResource
. На самом деле он не проверяет, представляет ли этот путь реальный файл на диске.Похоже, что конструктор
POSDictionary
пытается создатьFile
, используя переданную ему строку пути, и этот путь на самом деле не представляет собой файл на диске, поэтому создается исключение.Я не понимаю, почему строка 4 вызывает исключение FileNotFoundException, хотя файл был найден уже внутри кувшин.
Потому что если ресурс находится в банке, то это не файл. Доступ к таким ресурсам возможен только при открытии входных потоков непосредственно из объекта
URL
или при использованииgetResourceAsStream()
вместоgetResource()
. Они не могут быть доступны с помощьюjava.io.File
, так как они не являются настоящими дисковыми файлами.