jar包路径问题

转载 2015年07月09日 15:22:45

开发完毕后,我们经常会将我们的程序打包成可运行jar文件,或者是war包。如果程序内部需要明确知道当前jar包所处的位置,下面是几种方法:



获取JAR包路径和所在目录的几种方法

之前转过一篇文章(读取jar包中资源文件的几个方法),详细介绍了如何读取保存在jar包内的资源文件。今天又遇到个问题,如何定位jar包所在位置呢?比如要输出错误日志到jar包的同级目录时,我们就需要知道jar包存放的目录。众所周知,未打包的.class文件获取当前目录很容易,但是打包成.jar文件就迥然不同了

搜来搜去,找到两个办法:

方法一:使用类路径

String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath()

这种方法可以得到当前程序jar文件的绝对路径(字符串值)。如果以被打成jar包,调用getFile()或调用getPath()得到的结果是相同的,均为 the/path/to/abc.jar 的形式。然而如果是class文件的话,两个方法调用返回的是不同的结果,这里不多做解释。
使用该方法得到的字符串是定位到jar文件的,如果想只得到jar文件所在目录,那么需要对该字符串再做处理,或者在getLocation()方法返回的URL上作处理。另外注意,如果路径包含Unicode字符(汉字),那么还需要使用 java.net.URLDecoder.decode(path, “UTF-8″) 方法进行转码,其中path是需要转码的字符串路径。

方法二:使用JVM属性

String path = System.getProperty("java.class.path")

这里使用了java运行时的系统属性来得到jar文件的位置,结果同1方法大致相同,且不需要做转码处理。 更多系统属性参见Oracle的说明。在使用class测试时,该方法得到的路径为 “类库路径:当前class路径”(Windows系统应该显示”类库路径;当前class路径”),然而运行jar包时只会得到我期望的jar包路径,这一点有点不解。

从jar包路径的到jar包的目录,我的方法是:


int firstIndex = path.lastIndexOf(System.getProperty("path.separator"))+1
int lastIndex = path.lastIndexOf(File.separator) +1;
path = path.substring(firstIndex, lastIndex);

当然,如果是采用方法一,就不需要计算firstIndex了。

另外为了扫盲,注明下面这写忽悠人的错误做法(摘自http://shallway.net/blog/?p=136):

  1.         print(Thread.currentThread().getContextClassLoader().getResource(“”));
  2.         print(CurrentDirectory.class.getClassLoader().getResource(“”));
  3.         print(ClassLoader.getSystemResource(“”));
  4.         print(CurrentDirectory.class.getResource(“”));
  5.         print(CurrentDirectory.class.getResource(“/”));
  6.         print(new File(“”).getAbsolutePath());
  7.         print(System.getProperty(“user.dir”));

相关文章推荐

获得执行jar的运行路径

题记 上一篇使用了一个叫fat-jar的插件来制作jar包,确实很方便。但我们更容易遇到另一个更为棘手的问题!如何得到jar包的运行路径? 如果没有这个路径,我们读取文件可能找不到路径,写文件可能...
  • whuslei
  • whuslei
  • 2012年03月09日 20:31
  • 25877

非web工程java项目中的路径问题(针对以jar包运行的工程)

最近做一个基于Netty框架的非web项目时,遇到了一些技术上的问题。抽时间给大家分享分享,希望给想我一样困惑过的同行一些帮助:     首先,我介绍一下我所做的项目的技术架构和运行机制。这个项目是...

Java或者JAR包获取读取资源文件的路径的问题总结

Java或者JAR包获取读取资源文件的路径的问题总结             这里分为具体两种: 第一种:资源文件为一般后缀文件 第二种:资源文件为图片文件 【NO1】第一种  ...

关于系统读取properties配置文件的路径问题,包括打成jar包的运行文件

在当前的一个项目中,遇到以下业务需要: 1.开发环境是在myeclipse里运行的时候,启动服务后,有一个加载配置文件属性信息的Global.java。用于得到配置文件里的配置信息; 2.发布系统...

jar包读取file的时候相对和绝对路径的问题

我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。在单独运行的时候这些简单的处理当然不会有问题。但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了。看看...
  • t69daj
  • t69daj
  • 2011年10月27日 15:10
  • 1282

打开eclipse 运行发现tomcat出问题。如路径找不到 (1)eclipse 运行出现:The archive:C:/tomcat/bin/bootstrap.jar which is refe

1.错误症状:右击tomcat server,选择start,出现下图所示错误 2.错误原因:   我为了方便管理,把tomcat安装到了当前的eclipse-project目录下:E:/wo...

Myeclipse导出jar文件图片路径问题

当你编写一个图形界面的程序的时候,你肯定要使用各种图片资源。那么,当你发布你的程序的时候,这些图片资源如何发布呢?最简洁的方式就是将这些图片资源连同你的class文件一起打包为一个可执行Jar文件,这...

Java 将图片打包到jar中的路径问题

Eclipse使用导出Jar包后打开加载不了图像?出现这种问题的原因大多是因为路径的问题,往往是在项目中运行正常,但是一旦打包成Jar后就不能正常显示了,下面总结一下解决此类问题的方法:一、通过使用外...
  • xkwong
  • xkwong
  • 2011年06月21日 15:04
  • 5451

打包jar文件的资源路径问题

获得资源的位置有两种方式: 针对图像和影音的,使用包含这代码的类调用getResource(......)方法,然后利用getImage或者getAudioClip方法进行读取。例如TextPa...

Jar文件配置文件路径问题

在Eclipse中运行的时候,一切正常。把Java工程导成了可运行Java文件,通过java -jar XX.jar命令运行的时候,会报异常说配置文件路径找不到....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jar包路径问题
举报原因:
原因补充:

(最多只允许输入30个字)