2013-03-03 14 views
8

Próbuję odczytać zasobu, który zostanie dołączony do JAR, ale dostaję NullPointer za:Czytanie zasobów z BufferedReader

bReader = new BufferedReader(new InputStreamReader(
        this.getClass().getResourceAsStream("resources/" + fileName))); 

pomocą pliku jednak działa dobrze ..

bReader = new BufferedReader(new FileReader(new File("resources/" + fileName))); 
+0

Czy możesz wydrukować ślad stosu błędu, proszę. – christopher

+1

Co to jest w pełni skrócona nazwa 'this.getClass()', a gdzie jest plik w słoiku? –

+0

Wyjątek w wątku "AWT-EventQueue-0" java.lang.NullPointerException \t w java.io.Reader. (Reader.java:61) \t w java.io.InputStreamReader. (InputStreamReader.java:55) – Skogen

Odpowiedz

14

Zakładając, że twój IDE lub Maven lub proces budowy będzie zawierał zawartość "zasobów" w słoiku u źródła, spróbuj znaleźć go w "/".

bReader = new BufferedReader(new InputStreamReader(
          this.getClass().getResourceAsStream("/" + fileName))); 

UPDATE:

Upewnij się, że folder "zasoby" jest skonfigurowany jako folder źródłowy.

+0

Używam Eclipse, a otrzymuję NullPointer podczas uruchamiania go w środowisku Eclipse. .jar nie ma nic wspólnego z problemem, poza faktem, że użyłbym przykładu dla pliku, jeśli nie ma żadnych planów utworzenia pliku .jar na końcu. – Skogen

+0

Mogę znaleźć plik za pomocą "/", jeśli pliki są przeciągane do folderu projektu, ale nie można go znaleźć z pliku wykonywalnego jar. – Skogen

+0

@Skogen: Zobacz aktualizację. – sgp15

-1

this.getClass().getResourceAsStream("resources/" + fileName) ładuje plik z classpath jako new File("resources/" + fileName) ładuje plik z katalogu roboczego (katalog główny projektu w środowisku Eclipse). Aby zrobić poprzednią pracę, musisz dodać słoik zawierający katalog resources do swojej ścieżki klas.

+0

nowy plik ("resources /" + fileName) nie jest workiong. – USer22999299

0

Czy to jest wiosenny projekt ramowy? Spróbuj:

BufferedReader bufferedReader = new BufferedReader(
      new InputStreamReader(new ClassPathResource("XML_Request.xml").getInputStream())); 

zasobów załadować siedzi w głównym katalogu src// Resources:

Resource to load is sitting in the src/main/resources directory

0

ustaw "zasobów" jako katalogu zasobów. Spróbuj kod:

bReader = new BufferedReader(new 
     InputStreamReader(getClass().getClassLoader().getResourceAsStream(fileName))) 
0

przeciwieństwie getClassLoader().getResourceAsStream(filename) wersja używasz getClass().getResourceAsStream(filename) używa ścieżki względem lokalizacji w klasie, zamiast korzenia ścieżce klasy. Musisz użyć ścieżki bezwzględnej getClass().getResourceAsStream("/" + filename) lub użyć wersji ClassLoader.

Upewnij się również, że "zasoby" znajdują się na ścieżce klas (jeśli używasz Maven, powinien to być "src/main/resources" w stosunku do twojego pom.xml). Jeśli tak, nie musisz faktycznie uwzględniać "zasobów" w nazwie pliku, ponieważ jest to katalog główny ścieżki klas.