Czy w Javie istnieje sposób na skonstruowanie instancji File na zasobie pobranym z pliku jar za pomocą modułu ładującego klasy?
Moja aplikacja używa niektórych plików z jar (domyślnie) lub z katalogu systemu plików określonego w czasie wykonywania (dane wejściowe użytkownika). Szukam spójnego sposobu
a) załadowania tych plików jako strumienia
b) wypisania plików odpowiednio w katalogu zdefiniowanym przez użytkownika lub katalogu w jar
Edycja: Najwyraźniej idealnym podejściem byłoby trzymanie się z daleka od java.io.File. Czy istnieje sposób, aby załadować katalog ze ścieżki klas i wyświetlić jego zawartość (zawarte w nim pliki / encje)?
źródło
InputStream
, otrzymujesz zgetResourceAsStream
zatrzymań, aby pobrać bajty zasobu po tym rozmiarze, a zamiast tego zwraca 0, jeśli jest zawarty w skompresowanym systemie plików, takim jak jar. Wydaje się,getResource
że w takim przypadku jesteś zmuszony używać i ładować plik niezależnie od tego.read
metody decydującej o tym, ile danych odczytać (nie byłem tego świadomy). I wydaje się, że cały plik jest czytany, jeśli czytany plik znajduje się w zwykłym folderze. Jeśli plik znajduje się w słoiku, ponieważ został zapakowany, odczytuje tylko jego część.InputStream
, jeśli chcesz przeczytać cały zasób, powinieneś zapętlić aż doread
zwrócenia -1.Miałem ten sam problem i mogłem skorzystać z:
źródło
FileSystem
obiekt i pobraćPath
z niego. Następnie możesz to przeczytać jak zwykle. (patrz stackoverflow.com/a/22605905/1876344 )Oto fragment kodu z jednej z moich aplikacji ... Daj mi znać, jeśli odpowiada Twoim potrzebom. Możesz tego użyć, jeśli znasz plik, którego chcesz użyć.
Mam nadzieję, że to pomoże.
źródło
toURI()
zawiedzie.Niezawodny sposób na skonstruowanie instancji File na zasobie pobranym z jar polega na skopiowaniu zasobu jako strumienia do pliku tymczasowego (plik tymczasowy zostanie usunięty po zamknięciu maszyny JVM):
źródło
Spróbuj tego:
Dostępnych jest więcej metod, np. Patrz tutaj: http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html
źródło
To jest jedna opcja: http://www.uofr.net/~greg/java/get-resource-listing.html
źródło