获得jar包存放路径的方法
2010-12-29 23:37
417 查看
获得jar包存放路径的方法
Posted by zeal on 2006-07-11 09:45 , 1371 characters | + 0 - 0 English转载请保留本行原始出处声明信息 : http://www.zeali.net/entry/404 MaDe1nZEAL
标签 ( JAVA/C++ ): jar
在 java 中, System.getProperty("user.dir") 得到的是当前工作路径(对应命令行命令就是 linux 下的 pwd 、 windows 下的 cd ),而 System.getProperty("user.home") 得到的是当前用户主目录(对应于 linux 下的 ~ 目录、 windows 下的 document and settings/username );但如果你想得到所运行的 java 程序所在的路径,似乎并没有什么简单的方法。
比如说,有一个 pathTest.jar 包放在 D:/zeal/webdev 下,这个 jar 执行的时候需要在当前目录下读写一个 test.log 文件。如果不采用绝对路径来读写 test.log 的话,不同的 jar 运行方式会带来不同的结果:
cd D:/zeal/webdev
java -jar pathTest.jar
( test.log 将生成在 D:/zeal/webdev 目录下 )
cd E:/sun/jre/bin
java -jar D:/zeal/webdev/pathTest.jar
( test.lgo 将生成在 E:/sun/jre/bin 目录下 )
这势必造成潜在的运行错误。解决的方法是必须在程序中指定 test.log 文件的绝对路径。从本意上来讲,这里我们希望 test.log 与 pathTest.jar 位于相同的路径之下。但显然无论是 "user.dir" 还是 "user.home" 都不会返回正确的结果。
幸好, java 允许我们定位某个 class 的 CodeSource , 通过 CodeSource 提供的 Location 信息就能够找到相关的文件路径。假设 pathTest.jar 的 main class 是 pathTest ,通过
new pathTest().getClass().getProtectionDomain().getCodeSource().getLocation();
就可以得到 pathTest.jar 的完整路径( file:/D:/zeal/webdev/pathTest.jar ),接下来怎么做就简单了。当然,实际应用中一般我们会选择把所有与jar相关的资源文件一起打包进去,或者使用 "user.home" 这样的固定位置来存放;除非在特殊情况下才会需要通过这个迂回的方式来获取相关的路径信息。
[b]注: CodeSource 得到的是类所在域信息,对于 jar 包返回的就是该 jar 包的完整路径文件名;如果是没有打包的 classpath 下的类,返回的则是该 classpath 的根路径。
[/b]
相关文章推荐
- 获得jar包存放路径的方法
- 获得jar包存放路径的方法
- 获得运行jar包存放路径的方法
- 获得jar包存放路径的方法
- 获得运行jar包存放路径的方法
- 获得运行jar包存放路径的方法
- 获得可执行jar包存放路径的方法
- 获得当前运行jar包存放路径
- 获得执行jar的运行路径-使用classloader的getResource方法
- java中获得jar包执行路径的方法
- 获得执行jar的运行路径-使用classloader的getResource方法
- Eclipse中指定第三方包JAR和类路径CLASSPATH的几个方法
- Java获得项目绝对路径方法总结
- 绝对路径,URL获得方法
- 无法获得Web绝对路径又一入侵方法
- VC 获得当前工作路径的方法
- 获得传入路径的方法
- 获得执行jar的运行路径
- Java开发中各种获得路径的方法
- 获得系统路径方法