1. 獲取Jar包的相對路徑
關於此話題,網上衆說紛紜。經嘗試,下面的方法是OK的。
1. xxx.class.getResource("filename")
這裏的filename是基於xxx的class文件的相對路徑。如果filename寫“”,返回.class文件的路徑。
2. xxx.class.getResource("/filename")
這裏的filename是不依賴於xxx的絕對路徑的,也就是以jar包所在目錄爲相對路徑。如果參數寫的是“/”,返回null。
無論是1,還是2,調用.getFile()獲得的路徑名稱,(一般裏面都有個感嘆號,)以參數傳入File類似的構造方法都是無效的,比如傳送給spring的ClassPathXmlApplicationContext。如果想讀取,需要使用getResourceAsStream,繞過File,以流的方式讀取。(URI的方式沒有嘗試)
不要直接調用Classloader的getResource方法,不論是從哪個類裏面getClassLoader得到的。
2. ClassPathXmlApplicationContext調用的時候報告找不到文件
如果xml文件成功打到jar包裏面,肯定是在classpath中的。解決找不到文件的方法是解壓jar包,查看xml文件在jar包中的組織方式,同時構造函數的參數不要以“/”開頭,應該使用相對路徑。