获得执行jar的运行路径

摘要:
打包成jar包后,结果就是jar包执行的路径!而且能识别中文!太系统的使用。getProperty,请参见http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html参考代码如下:[java]viewplaincopyprint?特别注意结果中的“斜线”。第一种方法是在Windows中正确表示路径,并使用“”分隔;方法2使用“/”进行除法,而不是正确的路径!所以你需要使用文件。获取绝对路径();转换结果没有太大不同。eclipse的结果是MainClass所在的目录,运行jar包的结果是jar包的完整路径。很容易找到程序运行的目录!

http://blog.csdn.net/whuslei/article/details/7337715

一般执行jar包有下面两种方式:

1、cd 到包含该jar包的目录里,执行命令

cdE:workspace4svnDemorun
java -jar Demorun_fat.jar

 

2、直接加入绝对路径(比如把jar包直接拖入cmd窗口,就可以得到jar包的路径了)并执行命令

java -jar E:workspace4svnDemorunDemorun_fat.jar

 

所以,如果直接取相对路径就会得到两个结果,前者会是“E:workspace4svnDemorun”,后者是"当前目录,如C:"。


解决办法

下面以一个jar包和一个data/in.txt为例来说明下面两种方法:

方法一:

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

在eclipse里运行(不打包)的结果是: “E:workspace4svnDemorunin;E:workspace4svnHelloHello_fat.jar” (注意:Hello_fat.jar不是可执行的jar,是从外部引入的包)

在cmd里运行jar包的结果是:“E:workspace4svnDemorunDemorun_fat.jar”

[小结]

(1)这种方法在eclipse中运行结果的意思是"Path used to find directories and JAR archives containing class files.",也就是结果包括了可执行.class文件的路径以及引入的jar包路径

(2)打包成jar包后,结果是jar包执行的路径!而且可以识别中文!

(3) 过于System.getProperty的用法参见http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

参考代码如下:

 

  1. importjava.io.File;
  2. importjava.net.URL;
  3. importjava.net.URLDecoder;
  4. publicclassMyPath{
  5. publicstaticStringgetPath(){
  6. StringfilePath=System.getProperty("java.class.path");
  7. StringpathSplit=System.getProperty("path.separator");//windows下是";",linux下是":"
  8. if(filePath.contains(pathSplit)){
  9. filePath=filePath.substring(0,filePath.indexOf(pathSplit));
  10. }elseif(filePath.endsWith(".jar")){//截取路径中的jar包名,可执行jar包运行的结果里包含".jar"
  11. //此时的路径是"E:workspaceDemorunDemorun_fat.jar",用"/"分割不行
  12. //下面的语句输出是-1,应该改为lastIndexOf("\")或者lastIndexOf(File.separator)
  13. //System.out.println("getPath2:"+filePath.lastIndexOf("/"));
  14. filePath=filePath.substring(0,filePath.lastIndexOf(File.separator)+1);
  15. }
  16. returnfilePath;
  17. }
  18. }


方法二:『力荐』

 

ClassName.class.getProtectionDomain().getCodeSource().getLocation().getPath()

 

在eclipse里运行(不打包)的结果是: “/E:/workspace/Demorun/bin/”

在cmd里运行jar包的结果是:“/E:/workspace/Demorun/Demorun_fat.jar”

如果不加.getPath,则结果是"file:/E:/workspace/Demorun/bin/"和"file:/E:/workspace/Demorun/Demorun_fat.jar",也就是说结果前面多了个"file:"

[小结]

(1)这种方法不支持中文,需要转化下。

(2)特别注意结果中的"斜线",方法一是windows中路径的正确表示,用""分割;方法二里是用"/"来分割,不是正确的路径!所以需要用file.getAbsolutePath();转化!

(3) 结果差异不大,在eclipse中的结果是.MainClass所在目录,而jar包运行的结果是jar包的完整路径。很容易可以得出程序运行的目录!具体程序如下:

 

  1. importjava.io.File;
  2. importjava.net.URL;
  3. importjava.net.URLDecoder;
  4. publicclassMyPath{
  5. publicstaticStringgetPath(){
  6. URLurl=MyPath.class.getProtectionDomain().getCodeSource().getLocation();
  7. StringfilePath=null;
  8. try{
  9. filePath=URLDecoder.decode(url.getPath(),"utf-8");//转化为utf-8编码
  10. }catch(Exceptione){
  11. e.printStackTrace();
  12. }
  13. if(filePath.endsWith(".jar")){//可执行jar包运行的结果里包含".jar"
  14. //截取路径中的jar包名
  15. filePath=filePath.substring(0,filePath.lastIndexOf("/")+1);
  16. }
  17. Filefile=newFile(filePath);
  18. ///Ifthisabstractpathnameisalreadyabsolute,thenthepathname
  19. //stringissimplyreturnedasifbythegetPathmethod.Ifthis
  20. //abstractpathnameistheemptyabstractpathnamethenthepathname
  21. //stringofthecurrentuserdirectory,whichisnamedbythesystem
  22. //propertyuser.dir,isreturned.
  23. filePath=file.getAbsolutePath();//得到windows下的正确路径
  24. returnfilePath;
  25. }
  26. }

免责声明:文章转载自《获得执行jar的运行路径》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在chrome浏览器中 页面生成二维码nginx 剔除 $args 变量中任意指定参数之万金油下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

【转载】SecureCRT配色推荐和永久设置

2.配置文件夹和其他颜色选项==“全局选项==”终端==“外观==”ANSI颜色单击第二行中的第五个色块以修改文件夹颜色:对第二个色块执行相同的操作以修改压缩包和jar包的颜色:如果设置后文件夹和其他的颜色无效,您可以对第二行中设置背景色和字体颜色的颜色块执行相同的操作!...

用python调用caffe时出错:AttributeError: 'module' object has no attribute 'bool_'

下面给出了一个解决方案,即重命名冲突的io文件:numpyと PyCaffe公司が io。年が 竞争す る よ で す$ pythonclassify。py--raw_scale255~/caffe/101_ObjectCategories/airaires/image_0001.jpg../result.npyTraceback:文件“classif.py...

AirtestIDE基本功能(二)

文件菜单-相应工具栏上的前四个按钮:新建、打开、保存和另存为新。单击此按钮以选择是否使用创建脚本。air后缀或带有的脚本。py后缀。新脚本将初始化代码,以帮助您从API引入Airtest的各种接口,并自动初始化设备。你可以看到。air脚本文件实际上是一个公用文件夹,其中放置了通过IDE捕获的图像和运行日志。软件关闭时,布局信息将自动保存。(3) 选项-设置设...

Notepad++正则表达式查找替换文本中文字符

测试需求测试工具中xml配置文件中的注释字段包含中文字符。Win10系统中使用的工具中偶尔会出现中文乱码,导致配置文件无效。解决方案是将配置文件中的中文注释替换为英文注释,或者直接替换和删除。如何查找和删除配置文件中的汉字?“记事本”中使用正则表达式[^x00 xff]来匹配汉字。替换完成如下3。所有汉字已被替换。...

SecureCRT优化调整、永久设置、保护眼睛和配色方案

您可以根据个人喜好调整字体大小。我已经习惯了4号字体。到目前为止,SecureCRT优化已经完成。...

IntelliJ idea设置显示错误代码提示

idea默认关闭自动编译,所以一些编译错误只有在编译的时候才会提示,例如修改了引用类。按图中设置打开自动编译:注意:idea默认打开省电模式,自动编译在省电模式下被禁用,所以需要在file˃powersavemode关闭省电模式。...