Невозможно создать объект File для файла в Jar - PullRequest
3 голосов
/ 20 июня 2010

Я пытаюсь включить несколько текстовых файлов в качестве ресурсов в мой исполняемый .jar-файл. Следующий код должен напечатать содержимое одного файла:

URI resourceFile = Driver.class.getResource("/etc/inputfile.txt").toURI();
System.out.println("Opening URI: " + resourceFile.toString());
File infile = new File(resourceFile);

Scanner sc = new Scanner(infile);
while (sc.hasNextLine())
    System.out.println(sc.nextLine());
sc.close();

После экспорта в качестве исполняемого jar, я получаю следующий вывод при запуске:

Открытие URI: rsrc: etc / inputfile.txt
java.lang.IllegalArgumentException: URI не является иерархическим в java.io.File. (File.java:363)

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

Спасибо
Martin

Ответы [ 2 ]

5 голосов
/ 20 июня 2010

URI представляет «файл» только тогда, когда схема имеет значение file:. И конструктор Файл (URI) в этом понятен. Вы не можете рассматривать упакованный файл внутри jar как файл, потому что ... это не то, что Java считает File: прочитайте определение того, что класс File представляет :

Абстрактное представление файла и имена каталогов .

Способ чтения - getResourceAsStream(), как вы сказали.

1 голос
/ 20 июня 2010

Вы не можете. java.io.File - это абстракция путей и имен файлов в файловой системе. Вам нужно будет придерживаться URL-домена, если вы хотите сослаться на файлы внутри JAR.

...