这两天又做了个Execute Jar Project.
觉得以前的Path的知识都忘的差不多了,决定自己总结一下。
1. 获取类路径
返回类路径内容,一般为:lib1.jar;lib2.jar。
1 | System.getProperty( "java.class.path" ); |
在命令行运行Java程序时,上面的代码将会返回"-cp"参数内容,例如,执行下面的命令返回".;test.jar":1 | java -cp .;test.jar Test |
2. Jar文件中路径操作
2.1 获取当前代码所在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命令后添加如下参数启动安全管理器,并且安全策略文件中没有getProtectionDomain权限,则上述代码会抛出SecurityException 异常。
1 | java -Djava.security.manager -Djava.security.policy== "安全策略文件绝对路径" |
2.2 读取当前代码所在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(); |
如果待读取资源文件在当前类的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(); |
如果待读取资源文件和当前类不在同一个package下,则可以使用绝对路径定位资源文件。上面的例子中,test.txt资源文件处在resource package下面,绝对路径为/resource/test.txt。 切记: /开头是从根下找, 没有/开头是相对路径
2.3 读取当其它Jar包中的资源文件
1 | InputStream is = new URL( "jar:file:/C:/test.jar!/test/test.txt" ).openStream();
|
posted on 2013-04-05 13:38
Daniel 阅读(379)
评论(1) 编辑 收藏 所属分类:
CoreJava