The java.io.File
dan mendampingi bertindak pada sistem file disk lokal. Akar penyebab masalah Anda adalah bahwa jalur relatif dalam java.io
bergantung pada direktori kerja saat ini. Yaitu direktori dari mana JVM (dalam kasus Anda: satu server web) dimulai. Misalnya ini mungkin C:\Tomcat\bin
atau sesuatu yang sama sekali berbeda, tetapi dengan demikian tidak C:\Tomcat\webapps\contextname
atau apa pun yang Anda harapkan. Dalam proyek Eclipse yang normal, itu akan menjadi C:\Eclipse\workspace\projectname
. Anda dapat mempelajari tentang direktori kerja saat ini dengan cara berikut:
System.out.println(new File(".").getAbsolutePath());
Namun, direktori kerja sama sekali tidak dapat dikontrol secara pemrograman. Anda harus benar-benar lebih suka menggunakan jalur absolut di File
API daripada jalur relatif. Misalnya C:\full\path\to\file.ext
.
Anda tidak ingin hardcode atau menebak jalur absolut dalam aplikasi Java (web). Itu hanya masalah portabilitas (yaitu berjalan di sistem X, tetapi tidak di sistem Y). Praktik yang normal adalah menempatkan sumber daya semacam itu di classpath , atau menambahkan path lengkapnya ke classpath (dalam IDE seperti Eclipse yang merupakan src
folder dan "build path"). Dengan cara ini Anda bisa meraihnya dengan bantuan ClassLoader
oleh ClassLoader#getResource()
atau ClassLoader#getResourceAsStream()
. Itu dapat menemukan file relatif ke "root" dari classpath, seperti yang Anda temukan secara kebetulan. Dalam aplikasi web (atau aplikasi lain yang menggunakan banyak classloader), disarankan untuk menggunakan yang ClassLoader
dikembalikan oleh Thread.currentThread().getContextClassLoader()
untuk ini sehingga Anda dapat melihat "di luar" konteks webapp juga.
Alternatif lain di webapps adalah ServletContext#getResource()
dan rekannya ServletContext#getResourceAsStream()
. Itu dapat mengakses file yang terletak di web
folder publik proyek webapp, termasuk /WEB-INF
folder. Ini ServletContext
tersedia dalam servlets dengan getServletContext()
metode yang diwarisi , Anda dapat menyebutnya apa adanya.
Lihat juga: