2011-11-24 24 views
13

Powiel możliwe:
How do I read a resource file from a Java jar file?Dostęp do pliku wewnątrz .jar

Zaczynając iść całkowicie zwariowany nad tym po googlowania godzinami. Widziałem też różne odmiany tego pytania na stronie, ale nie mogę sprawić, by działało. JFrame musi odczytać dane z pliku ini i stworzyłem metodę otwierania tego pliku. Wspomniany plik jest przechowywany w folderze zwanym zasobami wewnątrz pliku jar.

private BufferedReader openIniFile(String filename){ 
    BufferedReader brReader = null;     
    try{ 
     File fileObj = new File(this.getClass().getResource("/resources/" + filename).toURI()); // The fileobject of the file to read 
     if(fileObj.exists())            
      brReader = new BufferedReader(new FileReader(fileObj));      

    } catch(Exception e){ 
     System.err.println("Exception while opening file: " + e.getMessage()); 

    } 

    return null; 
} 

To oczywiście działa idealnie, kiedy biegnę kod po kompilacji, ale zgłasza wyjątek po eksportowane do pliku .jar. Przyjrzałem się za pomocą InputStream, FileInputStream, ale nie można znaleźć rozwiązanie, które mogłoby działać.

Jak mogę uczynić plik jar rozpoznaniem zasobu?

+0

Próbowałem, że nie mógł dostać pracy :( – Chrizmo

+0

„nie mógł dostać pracy” nie pomaga znacznie –

+0

Niestety o tym. Nadal zgłasza wyjątek zerowy: – Chrizmo

Odpowiedz

19

Kiedy Twój plik znajduje się w pliku JAR, nie jest już plikiem. Plik jest tylko fizycznym plikiem w systemie plików. Rozwiązanie: użyj getResourceAsStream. Coś takiego:

new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/resources/" + filename))) 
+0

Ale jeśli użyję getResourceAsStream, nie mogę użyć klasy File poprawnie? – Chrizmo

+1

To prawda. plik –

+1

Mam katalog w zasobach, który ma wszystkie pliki .Jak nawigować po katalogu, aby uzyskać dostęp do wszystkich plików, a następnie użyć powyższego? – Ava

4

Czytasz plik nieprawidłowo. Jeśli plik znajduje się w pliku JAR, nie można użyć klasy File. Zamiast tego należy uzyskać InputStream do pliku przy użyciu getResourceAsStream():

InputStream in = this.getClass().getResourceAsStream("/resources/" + filename); 
Powiązane problemy