Нулевое значение для ресурса в Java
Я хотел бы поместить ресурсы в мой JAR-файл, но при его использовании возникает проблема. Если я покажу путь с этим кодом:
JOptionPane.showMessageDialog(null, MyStaticClass.class.getResource("/ressources/") + "file.File" + i, "OK", JOptionPane.INFORMATION_MESSAGE);
File file = new File(MyStaticClass.class.getResource("/ressources/") + "file.File" + i);
Результатом сообщения является jar:file:/home/clement/Bureau/Untitled.jar!/ressources/niveau.Niveau1
и исключение
java.io.FileNotFoundException: jar:file:/home/clement/Bureau/Untitled.jar!/ressources/file.File1 (No file or folder of this type)
Файлы находятся в папке src в src/ressources/file.File1
1 ответ
getResourceAsStream()
возвращает InputStream
, Ваш код в основном пытается найти файл '/ressources/', который является не файлом, а каталогом, поэтому getResourceAsStream()
возвращается null
для этого.
Нет смысла печатать InputStream
, Что вы можете сделать, это что-то вроде этого:
InputStream is = MyStaticClass.class.getResourceAsStream("/ressources/" + "file.File1")
А затем прочитайте его содержимое (например, используя InputStream
"s read()
методы, или оберните его InputStreamReader
и использовать это read()
, Трудно дать больше советов, потому что я не знаю, что вы хотели бы сделать с тем, что вы читаете.
Обновление для обновленного кода вопроса следует
getResource()
возвращает URL
экземпляр, который также не подходит для печати (и для объединения с помощью оператора +). Но вы можете преобразовать его в File
Например, если вам нравится с помощью getFile()
метод:
File file = new File(MyStaticClass.class.getResource("/ressources/" + "file.File" + i).getFile());
Пожалуйста, обратите внимание, что getResource()
вызывается по полному имени ресурса, а не только по имени каталога.
Тогда вы могли бы работать с этим File
пример.
Но если вы просто хотите прочитать содержимое ресурса, вы можете сделать что-то вроде следующего (без необходимости получать URL
пример):
InputStream is = MyStaticClass.class.getResourceAsStream("/ressources/" + "file.File1")
Scanner scanner = new Scanner(new InputStreamReader(is, "utf-8"));
try {
if (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
} finally {
scanner.close();
}
В этом примере предполагается, что ваш файл является текстовым файлом и имеет как минимум одну строку. Эта строка выводится на консоль.