這兩天又做了個(gè)Execute Jar Project.
覺得以前的Path的知識都忘的差不多了,決定自己總結(jié)一下。
1. 獲取類路徑
返回類路徑內(nèi)容,一般為:lib1.jar;lib2.jar。
1 | System.getProperty( "java.class.path" ); |
在命令行運(yùn)行Java程序時(shí),上面的代碼將會返回"-cp"參數(shù)內(nèi)容,例如,執(zhí)行下面的命令返回".;test.jar":1 | java -cp .;test.jar Test |
2. Jar文件中路徑操作
2.1 獲取當(dāng)前代碼所在Jar包的絕對路徑
1 | File f = new File(Test. class .getProtectionDomain().getCodeSource().getLocation().getPath()); |
3 | System.out.println(f.getAbsolutePath()); |
5 | System.out.println(f.getParent()); |
需要注意的是,如果在java命令后添加如下參數(shù)啟動安全管理器,并且安全策略文件中沒有getProtectionDomain權(quán)限,則上述代碼會拋出SecurityException 異常。
1 | java -Djava.security.manager -Djava.security.policy== "安全策略文件絕對路徑" |
2.2 讀取當(dāng)前代碼所在Jar包中的資源文件
1)相對路徑訪問

2 | public static void main(String[] args) throws Exception { |
3 | InputStream is1 = Test. class .getResourceAsStream( "test.txt" ); |
4 | InputStream is2 = Test. class .getResource( "test.txt" ).openStream(); |
如果待讀取資源文件在當(dāng)前類的package下,則可以使用相對路徑定位資源文件。上面的例子中,test.txt文件和Test類同處在test package下面,相對路徑為test.txt。
2) 絕對路徑訪問

2 | public static void main(String[] args) throws Exception { |
3 | InputStream is1 = Test. class .getResourceAsStream( "/resource/test.txt" ); |
4 | InputStream is2 = Test. class .getResource( "/resource/test.txt" ).openStream(); |
如果待讀取資源文件和當(dāng)前類不在同一個(gè)package下,則可以使用絕對路徑定位資源文件。上面的例子中,test.txt資源文件處在resource package下面,絕對路徑為/resource/test.txt。 切記: /開頭是從根下找, 沒有/開頭是相對路徑
2.3 讀取當(dāng)其它Jar包中的資源文件
1 | InputStream is = new URL( "jar:file:/C:/test.jar!/test/test.txt" ).openStream();
|
posted on 2013-04-05 13:38
Daniel 閱讀(401)
評論(1) 編輯 收藏 所屬分類:
CoreJava