NullPointerException с InputStreamReader с использованием getResourceAsStream

Я пытаюсь прочитать текстовый файл из архива JAR моей программы. Я получаю исключение нулевого указателя при вызове метода. Я не могу найти много примеров того, как это сделать, которые работают в Интернете, все они очень похожи на то, что я использую.

public class ConsoleHelp {
    public void print() {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/data/cmdhelp")));

            int c;
            do {
                c = reader.read();
                System.out.print((char) c);
            } while (c > -1);
            System.out.println();
        } catch (IOException e) {
            System.out.println("JAR file has not been packaged correctly.");
        }
    }
}

Я получаю эту ошибку, когда пытаюсь запустить этот код: $ java -jar accface-0.1-test8.jar help

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.NullPointerException
        at java.io.Reader.<init>(Reader.java:78)
        at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
        at frontend.ConsoleHelp.print(ConsoleHelp.java:11)
        at frontend.Command.main(Command.java:112)
        ... 5 more

person cyrus    schedule 02.06.2014    source источник
comment
Ошибка указывает на то, что нужный ресурс недоступен. И у SO есть много вопросов о getResourceAsStream().   -  person kdgregory    schedule 03.06.2014
comment
Какова структура проекта, в котором присутствует этот файл?   -  person Braj    schedule 03.06.2014
comment
Я ответил на него здесь примерно в том же контексте. Это может помочь вам понять структуру проекта и getResourceAsStream()   -  person Braj    schedule 03.06.2014


Ответы (1)


Откройте банку с помощью 7zip, WinZip или около того. И проверьте путь "/data/cmdhelp". Это должно быть чувствительно к регистру.

person Joop Eggen    schedule 02.06.2014
comment
Я вижу, что произошло, дополнительные исходные папки в eclipse имеют тот же путь. Таким образом, путь к нему для getResourceAsStream был /cmdhelp, а не /data/cmdhelp. - person cyrus; 03.06.2014