2013-04-12 19 views
5

Próbuję odczytać plik spakowany wewnątrz pliku JAR wraz z klasą, która go czyta. Aby to zrobić, używam następujące:Czytanie plików z poziomu JAR nie działa w systemie Windows

getClass().getClassLoader().getResourceAsStream(file) 

Działa to dobrze, gdy tworzę i uruchomić plik JAR na OSX, ale jeśli utworzyć i uruchomić plik JAR na oknach, powyższa linia zwraca null.

Czy tu czegoś brakuje? Jeśli utworzę JAR na OSX i uruchomię go w systemie Windows, działa dobrze. Problem występuje tylko wtedy, gdy utworzę plik JAR w systemie Windows.

EDYCJA: Warto wspomnieć, że nie ma hierarchii folderów w pliku JAR. Wszystko jest przechowywane na jednym poziomie, więc klasa czyta plik, a sam plik znajduje się w tym samym katalogu. Dodatkowo, jest to jak tworzę plik JAR, zarówno na OSX i Windows:

jar -cmf manifest.mf run.jar *.class file1 file2 

EDIT 2: Plik Próbuję załadować plik jest .properties Java. Rozumiem, że to nie jest przyczyną problemu?

+0

Pliki jar są plikami zip, więc można ich użyć do zweryfikowania wersji utworzonej przez system Windows. Zmień nazwę pliku na .zip, a następnie przejdź do środka za pomocą Eksploratora Windows. –

+0

@NathanielWaisbrot weryfikuje co dokładnie? Że wszystkie pliki są tam? Sprawdziłem to (używając słoika -tf zamiast tego) i zdecydowanie tam są, w strukturze opisanej w pytaniu – Kumalh

+0

Mówisz, że słoik zbudowany na Macu działa w systemie Windows, ale słoik zbudowany na Windowsie nie działa. Diff zawartość dwóch plików jar. Jeśli używasz tej samej wersji Java, myślę, że pliki .class powinny być identyczne. –

Odpowiedz

0

Pomiń część modułu ładującego klasy. Po prostu getClass(). GetResource ....

+0

Chciałbym 'Classloader.getSystemResource()' –

+0

Próbowałem również. Takie same wyniki: działa w systemie OSX, a nie w systemie Windows. Próbowałem również 'this.getClass(). GetResourceAsStream (" \ file ");', ale to nie zadziałało ani na – Kumalh

+0

Aha! Nie używaj żadnych separatorów ścieżek. Tylko nazwa pliku. –

0

Wypróbuj w ten sposób getClass(). GetResourceAsStream ("/ file1").

Powiązane problemy