Нулевое значение для ресурса в 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();
}

В этом примере предполагается, что ваш файл является текстовым файлом и имеет как минимум одну строку. Эта строка выводится на консоль.

Другие вопросы по тегам