获得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" 这样的固定位置来存放;除非在特殊情况下才会需要通过这个迂回的方式来获取相关的路径信息。

注: CodeSource 得到的是类所在域信息,对于 jar 包返回的就是该 jar 包的完整路径文件名;如果是没有打包的 classpath 下的类,返回的则是该 classpath 的根路径。

获得jar包存放路径的方法相关推荐

  1. java jar包存放位置_获得运行jar包存放路径的方法

    在 java 中, System.getProperty("user.dir") 得到的是当前工作路径(对应命令行命令就是 linux 下的 pwd . windows 下的 cd ...

  2. java jar包的路径

    用java些的脚本,然后打成jar包运行,jar包里的程序需要读配置文件的一些参数,所以需要确定读配置文件的路径.一般配置文件和jar包放置在同一目录下,这个时候就需要jar包里的代码,取到jar包存 ...

  3. centos运行jar包需要的环境_Centos7服务器下启动jar包项目的最佳方法

    前言 在linux上运行jar包谁都会啊.为什么我还要单独拎出来讲呢.细心的朋友可能已经在标题中发现关键词Centos7和最佳方式. 这就说明我不是随便写点东西水一篇博客的ヾ(◍°∇°◍)ノ゙ 首先C ...

  4. java配置pom安装依赖包,Maven pom.xml 添加本地jar包依赖以及打包方法

    Maven项目打包时,如果遇到需要添加本地jar包依赖的时候,可以选择两种方法: 1. 安装到本地仓库 第一种方法比较常规,适用于需要添加的jar包也是由maven项目导出,含有pom文件的时候.只需 ...

  5. IDEA导入jar包,及import jar包时jar包自动消失问题解决方法

    导入jar包 :文件-->项目结构-->模块-->依赖-->+-->jars或目录-->把jar包路径粘贴进去 import jar包自动消失问题解决方法:文件-- ...

  6. Intellij+maven:jar包冲突的解决方法(Hbase和Guava的冲突)

    Intellij+maven:jar包冲突的解决方法(Hbase和Guava的冲突) 参考文章: (1)Intellij+maven:jar包冲突的解决方法(Hbase和Guava的冲突) (2)ht ...

  7. java执行jar中的main_浅谈java 执行jar包中的main方法

    浅谈java 执行jar包中的main方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 ...

  8. JAVA获取程序/jar包所在路径

    public class path{public static void main(String []args){//输出本程序/jar包所在路径System.out.println(System.g ...

  9. maven文件报错(pom.xml或者jar包缺失)解决方法

    maven文件报错(pom.xml或者jar包缺失)解决方法 参考文章: (1)maven文件报错(pom.xml或者jar包缺失)解决方法 (2)https://www.cnblogs.com/wa ...

最新文章

  1. linux的网络地址配置,教你如何完成Linux网络地址配置
  2. oracle rac 通信端口,修改oracle 10g rac监听端口号为1523的步骤
  3. 关于@DQ的留言回复
  4. 2018-2019-2 20165330《网络对抗技术》Exp9 Web安全基础
  5. 计量经济学自相关matlab,计量经济学 自相关性.ppt
  6. 2021-01-11
  7. PKM2 - PKManager 基于内容的个人知识管理工具 5M 绿色免费
  8. 背景图片定位background-position用photoshopcs4标尺工具
  9. 计算机报名503,503错误,教您网页出现503错误怎么解决
  10. dpi、ppi、apm是什么
  11. 选择中医 - 养生之道
  12. OpenJ_Bailian - 3468
  13. php自我介绍50字,自我介绍50字
  14. 雷电模拟器 服务器无响应,雷电模拟器键没反应 | 手游网游页游攻略大全
  15. Zabbix 3.4配置监控项及监控Linux、Windows客户端
  16. 第二十五章 Unity 刚体Rigidbody
  17. 【LeetCode】1652. 拆炸弹(C++)
  18. 从linux上下载命令行,分享|如何在Linux命令行中下载GOG游戏
  19. 三年级计算机教案 渔舟唱晚,人音版五级上册音乐 渔舟唱晚 教案 .docx
  20. 微信小程序引入echarts图表(保姆式)

热门文章

  1. 企业生产过程中的日志和时间管理详解
  2. 【教程】1、加载静态内容
  3. 计算机初级学哪个公需课,西安职称评审申报你遇到以下问题了吗?
  4. python大众点评网应该涉及哪些参考文献及其出版社_python小练习(052):爬取大众点评网美食版块+数据库储存+大数据分析(二)...
  5. winform 让他间隔一段时间 执行事件 且只执行一次_Redis 事件机制详解
  6. redisson的锁的类型_利用Redisson实现分布式锁,并防止重复提交
  7. 转行python经验_【经验分享】转行如何自学Python并且找到工作,分享自己心得
  8. 苹果测试软件testflight游戏,苹果内测工具TestFlight的使用
  9. python抽奖游戏_python实现转盘效果 python实现轮盘抽奖游戏
  10. java产生随机数(学习)