Получение ресурсов из jar'ника

3,005
192
592
При получении ресурсов во время работы в IDE - то все хорошо.
Если я скомпилирую jar'ник и буду этим же методом получать ресурсы - получаю null.
Код:
Код:
MyClass.class.getResource("/Path/To/File.txt");
Как можно получить ресурсы, когда работаешь через jar файл?
 
3,005
192
592
@Ivasik Получаю NPE в
Код:
URI uri= MyClass.class.getResource(pathStr).toURI();
~~~
По поводу InputSteam - мне нужно сначала получать все файлы, как было в примере Ивасика, а уже после читать определенные файлы.
 

Icosider

Kotliner
Администратор
3,603
99
664
Нпе потому что ты путь видимо неправильно задал.
20180614_103425.jpg
 
3,005
192
592
Этот скрин я уже сохранил)
В IDE - все корректно работает.
Значит путь верный, нет?
 

Icosider

Kotliner
Администратор
3,603
99
664
Ну я не знаю в каких ты папка че ищешь. У меня все работает и у заказчика тоже все работает.
 
3,005
192
592
1528966426312.png
1528966439328.png
 

Icosider

Kotliner
Администратор
3,603
99
664
А jar покажи(внутри)

А забыл сказать, у тебя в папке обязательно должен быть один файл. Я не стал добавлять проверку, так как мне так нужно было.
 
3,005
192
592
3,005
192
592
В директорию "/res/test" положил пустой txt файл.
Так же NPE.
 
3,005
192
592
Если использовать
Код:
getClass()#getResourceAsStream
И указывать туда файл из /res/test - то он не нулл..
 
3,005
192
592
Java:
package test;

import java.io.File;
import java.net.URI;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;

public class Test {

    public static void main(String[] args) {
        new Test().main();
    }

    public void main() {
        try {
            String pathStr = "/res/test";
            URI pathURI = getClass().getResource(pathStr).toURI(); // Тут NPE
            Path pathPath = pathURI.getScheme().equals("jar")
                    ? FileSystems.newFileSystem(pathURI, Collections.emptyMap()).getPath(pathStr)
                    : Paths.get(pathURI);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Вот фулл класс.
 
3,005
192
592
Смысл в том, что в IDE - все работает.
Разве можно дебажить через консоль?
~
URL pathURL = getClass().getResource(pathStr); - нормально
URI pathURI = pathURL.toURI(); - NPE.
~
pathURL.getProtocol() - NPE. (Через него тоже вроде можно получить file/jar)
 

Icosider

Kotliner
Администратор
3,603
99
664
PathURL в стринг переведи и выведи в консоль.
 
3,005
192
592
В IDE - file: и до бин'а.
В консоле - null.
 
3,005
192
592
Java:
package test;

import java.io.File;
import java.net.URI;
import java.net.URL;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;

public class Test {

    public static void main(String[] args) {
        new Test().main();
    }

    public void main() {
        try {
            String pathStr = "/res/test";
            URL pathURL = getClass().getResource(pathStr);
            System.out.println(pathURL); // <- Тут NPE в консоле.
            URI pathURI = pathURL.toURI();
            Path pathPath = pathURI.getScheme().equals("jar")
                    ? FileSystems.newFileSystem(pathURI, Collections.emptyMap()).getPath(pathStr)
                    : Paths.get(pathURI);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Вот код с выводом.
Выводил я URL.
 
Сверху