Apakah ada cara di Java untuk membuat instance File pada resource yang diambil dari jar melalui classloader?
Aplikasi saya menggunakan beberapa file dari jar (default) atau dari direktori sistem file yang ditentukan saat runtime (input pengguna). Saya mencari cara yang konsisten untuk
a) memuat file ini sebagai aliran
b) mencantumkan file di direktori yang ditentukan pengguna atau direktori di masing-masing jar
Sunting: Rupanya, pendekatan yang ideal akan menjauh dari java.io.File sama sekali. Apakah ada cara untuk memuat direktori dari classpath dan mencantumkan isinya (file / entitas yang ada di dalamnya)?
sumber
InputStream
Anda dapatkan darigetResourceAsStream
stop untuk mengambil byte sumber daya setelah ukuran itu dan sebagai gantinya mengembalikan 0 jika itu terdapat dalam sistem file terkompresi seperti jar. Anda tampaknya dipaksa untuk menggunakangetResource
dan memuat file secara terpisah dari ini dalam kasus itu.read
metode yang memutuskan berapa banyak data yang akan dibaca (saya tidak menyadarinya). Dan tampaknya seluruh file terbaca jika file yang sedang dibaca terletak di folder biasa. Jika file berada di dalam jar karena telah dikemas, file itu hanya membaca sebagian saja.InputStream
, jika Anda ingin membaca seluruh resource, Anda harus melakukan loop hinggaread
mengembalikan -1.Saya memiliki masalah yang sama dan dapat menggunakan yang berikut ini:
sumber
FileSystem
objek dan mendapatkanPath
dari itu. Kemudian Anda bisa membacanya seperti biasa. (lihat stackoverflow.com/a/22605905/1876344 )Ini sedikit kode dari salah satu aplikasi saya ... Beri tahu saya jika sesuai dengan kebutuhan Anda. Anda dapat menggunakan ini jika Anda mengetahui file yang ingin Anda gunakan.
Semoga membantu.
sumber
toURI()
akan gagal.Cara yang dapat diandalkan untuk membuat instance File pada sumber daya yang diambil dari jar adalah dengan menyalin sumber daya sebagai aliran ke dalam File sementara (file temp akan dihapus ketika JVM keluar):
sumber
Coba ini:
Ada lebih banyak metode yang tersedia, misalnya lihat di sini: http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html
sumber
Ini adalah salah satu opsi: http://www.uofr.net/~greg/java/get-resource-listing.html
sumber