Masalah Anda adalah Anda tidak tahu apa direktori "saat ini". Jika Anda memulai Tomcat di Linux sebagai layanan, direktori saat ini bisa berupa apa saja. Jadi new File(".")
akan memberi Anda tempat acak di sistem file.
Menggunakan properti sistem catalina.base
jauh lebih baik karena skrip awal Tomcat catalina.sh
akan mengatur properti ini. Jadi ini akan berhasil selama Anda tidak mencoba menjalankan aplikasi Anda di server yang berbeda.
Kode yang bagus akan terlihat seperti ini:
File catalinaBase = new File( System.getProperty( "catalina.base" ) ).getAbsoluteFile();
File propertyFile = new File( catalinaBase, "webapps/strsproperties/strs.properties" );
InputStream inputStream = new FileInputStream( propertyFile );
Seperti yang Anda lihat, kode tidak mencampur string dan file. File adalah file dan string hanyalah teks. Hindari menggunakan teks untuk kode.
Selanjutnya, saya menggunakan getAbsoluteFile()
untuk memastikan saya mendapatkan jalur yang berguna dalam pengecualian.
Pastikan juga kode Anda tidak menelan pengecualian. Jika Anda dapat melihat pesan kesalahan dalam kode Anda, Anda akan langsung melihat bahwa kode tersebut mencoba mencari di tempat yang salah.
Terakhir, pendekatan ini rapuh. Aplikasi Anda rusak jika jalur berubah, saat server web yang berbeda digunakan, dan untuk banyak kasus lainnya.
Pertimbangkan untuk memperluas webapp strsproperties
untuk menerima permintaan HTTP. Dengan begitu, Anda dapat mengonfigurasi aplikasi Anda untuk terhubung ke strsproperties
melalui URL. Ini akan berfungsi untuk server web apa pun, Anda bahkan dapat meletakkan properti di host yang berbeda.
Jika kode Anda berjalan di dalam servlet, mungkin lebih mudah menggunakan getServletContext().getRealPath("/strs.properties")
untuk mengambil jalur file absolut.