Proyek saya memiliki struktur berikut:
/src/main/java/
/src/main/resources/
/src/test/java/
/src/test/resources/
Saya memiliki file /src/test/resources/test.csv
dan saya ingin memuat file dari unit test di/src/test/java/MyTest.java
Saya memiliki kode ini yang tidak berfungsi. Itu mengeluh "Tidak ada file atau direktori".
BufferedReader br = new BufferedReader (new FileReader(test.csv))
Saya juga mencoba ini
InputStream is = (InputStream) MyTest.class.getResourcesAsStream(test.csv))
Ini juga tidak berfungsi. Ia kembali null
. Saya menggunakan Maven untuk membangun proyek saya.
this.getClass().getResource("/test.csv")
Jawaban:
Coba yang berikutnya:
Jika hal di atas tidak berhasil, berbagai proyek telah ditambahkan kelas berikut: 1 (kode di sini ). 2
ClassLoaderUtil
Berikut adalah beberapa contoh bagaimana kelas itu digunakan:
Catatan
sumber
Object.class.getClassLoader();
, dari konteks statis yang tidak bekerja - saran ini tidak - baik hampir, itu menyuntikkan%20
ruang yang memberi sayaFileNotFoundException
Mencoba:
IIRC
getResourceAsStream()
secara default relatif terhadap paket kelas.Seperti yang dicatat oleh @Terran, jangan lupa menambahkan
/
di awal nama filesumber
String
stackoverflow.com/a/35446009/544045Berikut adalah satu solusi cepat dengan penggunaan Jambu Biji :
Pemakaian:
sumber
Coba kode Mengalir pada proyek Musim Semi
Atau pada proyek non musim semi
sumber
Proyek non musim semi:
Untuk proyek semi, Anda juga dapat menggunakan satu kode baris untuk mendapatkan file apa pun di bawah folder sumber daya:
sumber
Sekarang saya menggambarkan kode sumber untuk membaca font dari direktori sumber daya pakar,
Itu bekerja untuk saya dan berharap bahwa seluruh kode sumber juga akan membantu Anda, Selamat Menikmati!
sumber
Untuk java setelah 1.7
sumber
Jika Anda menggunakan ClassLoader konteks untuk menemukan sumber daya maka pasti akan biaya kinerja aplikasi.
sumber
Impor yang berikut ini:
Metode berikut mengembalikan file dalam ArrayList of Strings:
sumber
Saya menghadapi masalah yang sama .
File tidak ditemukan oleh pemuat kelas, yang berarti tidak dikemas ke dalam artefak (tabung). Anda perlu membangun proyek . Misalnya, dengan pakar:
Jadi file yang Anda tambahkan ke folder sumber daya akan masuk ke pakar pembuatan dan menjadi tersedia untuk aplikasi.
Saya ingin menjaga jawaban saya: tidak menjelaskan cara membaca file (jawaban lain lakukan menjelaskan bahwa), itu menjawab mengapa
InputStream
atauresource
itu nol . Jawaban serupa ada di sini .sumber
getResource () berfungsi dengan baik dengan file sumber daya ditempatkan di
src/main/resources
hanya. Untuk mendapatkan file yang berada di jalur selainsrc/main/resources
mengatakansrc/test/java
Anda harus membuatnya dengan rumit.contoh berikut dapat membantu Anda
sumber
Apakah kode berfungsi saat tidak menjalankan toples Maven-build, misalnya saat menjalankan dari IDE Anda? Jika demikian, pastikan file tersebut benar-benar termasuk dalam toples. Folder sumber daya harus dimasukkan dalam file pom, di
<build><resources>
.sumber
Kelas berikut dapat digunakan untuk memuat
resource
dariclasspath
dan juga menerima pesan kesalahan pas jika ada masalah dengan yang diberikanfilePath
.sumber
Saya memecahkan masalah ini dengan menambahkan
/scr/main/resources
folder ke file sayaJava Build Path
sumber
Saya membuatnya bekerja pada kedua jar berjalan dan dalam IDE dengan menulis sebagai
sumber
sumber
Anda dapat menggunakan com.google.common.io.Resources.getResource untuk membaca url file dan kemudian mendapatkan konten file menggunakan java.nio.file.Files untuk membaca konten file.
sumber
Saya membuatnya bekerja tanpa referensi ke "class" atau "ClassLoader".
Katakanlah kita memiliki tiga skenario dengan lokasi file 'example.file' dan direktori kerja Anda (tempat aplikasi Anda dijalankan) adalah home / mydocuments / program / proyek / myapp:
a) Sub folder yang turun ke direktori kerja: myapp / res / files / example.file
b) Sub folder tidak turun ke direktori kerja: proyek / file / example.file
b2) Sub folder lain yang tidak turun ke direktori kerja: program / file / example.file
c) Folder root: home / mydocuments / files / example.file (Linux; di Windows ganti home / dengan C :)
1) Dapatkan jalan yang benar: a)
String path = "res/files/example.file";
b)String path = "../projects/files/example.file"
b2)String path = "../../program/files/example.file"
c)String path = "/home/mydocuments/files/example.file"
Pada dasarnya, jika itu adalah folder root, mulailah nama path dengan slash terkemuka. Jika ini adalah sub folder, tidak boleh ada garis miring sebelum nama path. Jika sub folder tidak turun ke direktori kerja Anda harus cd ke sana menggunakan "../". Ini memberitahu sistem untuk naik satu folder.
2) Buat objek File dengan melewati jalan yang benar:
3) Sekarang Anda baik untuk pergi:
sumber