之前好像有寫過用 當下的 class 找他的實體檔案路徑在那~
不過當然這都在一個前提下~ 該 class/resource 沒有被包在 jar 檔裡~
(在jar檔裡的話~阿就通通zip在一起了,那來的各別路徑Orz...)
所以以下一律以散的class來講~
一般正常來說,取該 class/或是resource/甚至只是要個檔案路徑,可以用這種寫法~
String javaPath = ClassLoader.getSystemResource(".").getPath();
但是在 tomcat 下, SystemResource是被改寫過的(會null)~不過用另一招可以再拿到~
String libPath = this.getClass().getClassLoader().getResource(".").getPath();
--> 這個會拿到 tomcat lib 的那個 path...WEB-INF/lib/
String javaPath = this.getClass().getClassLoader().getResource("log4j.properties").getPath();
--> 是個爛解~不過這樣就可以拿到 WEB-INF/classes/ 的實體路徑
(你不會說你不用 log4j 吧!!)
String somewherePath = this.getClass().getClassLoader().getResource("test/files").getPath();
--> 如果你有建個該建的資料夾在那是可以拿到 WEB-INF/classes/test/files/
老實說~用ClassLoader這個蠻容易被裱的...
不過通常大家若在 webapps 下,是可以用 ServletContext 來取得 webapps/xxx/ 的那個實體路徑...
但是我想通用於一般跟在 tomcat 下的情況~目前是這樣寫著來用~
URL ul = ClassLoader.getSystemResource(MY_LOACTION);
if(ul == null) {
//tomcat or other webapps has no SystemResource
path = this.getClass().getClassLoader().getResource(MY_LOACTION).getPath();
//System.out.println(this.getClass().getClassLoader().getResource(".").getPath());
//System.out.println(this.getClass().getClassLoader().getResource("log4j.properties").getPath());
} else {
path = ul.getPath();
}
沒有留言:
張貼留言