`

获得执行jar的运行路径

    博客分类:
  • Java
阅读更多

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

 

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

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

cdE:\workspace4svn\Demorun\
java -jar Demorun_fat.jar

 

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

java -jar E:\workspace4svn\Demorun\Demorun_fat.jar

 

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


解决办法

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

方法一:

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

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

在cmd里运行jar包的结果是:“E:\workspace4svn\Demorun\Demorun_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:\workspace\Demorun\Demorun_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. }

 

分享到:
评论

相关推荐

    windows运行jar包指定jdk路径

    windows运行jar包指定jdk路径的脚本文件。可以不用系统的jdk运行,指定某个文件下的jdk运行jar包

    可执行jar文件.以及执行命令

    3. **执行JAR文件**:运行JAR文件有几种方式: - **使用java命令**:通过指定`-jar`选项和JAR文件名来执行: ``` java -jar myapp.jar ``` - **在命令行中指定主类**:如果JAR没有`MANIFEST.MF`或主类不在`...

    jar文件运行批处理

    标题中的"jar文件运行批处理"指的是创建一个批处理脚本,使得用户可以通过双击批处理文件来启动Java应用程序。批处理文件本质上是包含一系列命令的文本文件,这些命令会在DOS命令行环境下执行。 "JarExecutor.bat...

    eclipse导出可运行的jar文件

    在 Java 开发过程中,经常需要将开发完成的应用程序打包成可执行的 jar 文件,以便于部署、分发及运行。Eclipse 是一款非常流行的 Java 集成开发环境(IDE),它提供了方便的工具帮助开发者将项目打包成 jar 文件。...

    运行jar程序时添加vm参数的方法

    java -D<系统属性名>=<值> -X<选项> <jar文件路径> ``` 例如,要设置JVM的堆大小以及开启远程监控,我们可以使用以下命令: ```bash java -Djava.rmi.server.hostname=主机ip \ -Dcom.sun.management.jmxremote....

    如何生成可执行jar文件

    - 类路径(classpath)在JAR文件内部已经由MANIFEST.MF文件管理,无需在运行时通过`-cp`或`-classpath`选项指定。 - 当JAR文件包含资源文件(如图片、配置文件等)时,确保它们也被包含在JAR中,并在代码中使用...

    使用Eclipse制作可执行jar文件

    1. **创建Manifest文件**:Manifest文件对于可执行JAR文件至关重要,因为它包含了主类信息以及其他依赖库的路径。在导出设置中,选择使用已存在的Manifest文件,或让Eclipse自动生成。 2. **编辑Manifest文件**:...

    myelipse生成可执行jar文件方法

    6. 现在,你生成的JAR文件应该可以正确运行,因为它包含了类路径信息。 ### 使用第三方插件fatjar fatjar是一个Eclipse的插件,它允许你轻松地将外部JAR包打包进你的项目JAR文件中。安装fatjar插件后,你可以按照...

    编译运行java带jar包

    一旦JAR文件创建完毕,我们可以通过`java`命令运行它,指定 `-jar` 选项和JAR文件的路径。如果MANIFEST.MF正确指定了主类,那么Java会自动执行它。例如: ```bash java -jar myapp.jar ``` 如果JAR文件依赖于...

    Kettle运行jar及其mvn脚本及配置文件.rar

    这通常涉及到将Kettle的JAR文件添加到项目的类路径中,并使用Java API与Kettle交互。 3. **基本JAR包**: 压缩包中的"**kettle运行环境Jar脚本及Pom配置文件.txt**"可能包含了Kettle运行所需的JAR文件列表,这些是...

    java的编译路径与运行路径

    当执行`java`命令时,JVM会遍历类路径中的所有目录和JAR文件来寻找所需的类。 在直接运行一个类(如`java HelloWorld`)时,JVM会从当前目录(".")开始查找对应的类文件。如果类有包,JVM会根据包结构在相应目录下...

    Java 自动加载JAR文件并运行其中的类方法

    在Java编程中,有时我们需要动态地加载外部JAR文件,并执行其中特定的类方法,这在插件系统、模块化应用或动态扩展性需求中尤为常见。本篇将详细讲解如何实现这一目标。 首先,理解JAR(Java Archive)文件是Java...

    JAR文件包详解,创建可执行jar

    制作可执行的JAR文件是JAR文件的主要用途之一,这使得Java程序可以像其他平台上的可执行文件一样被用户双击运行。为了创建可执行JAR,我们需要指定一个`MANIFEST.MF`文件,其中包含`Main-Class`属性,它指明了程序...

    WebSphere下的所有jar文件名和路径

    这些JAR文件对于WebSphere的正常运行至关重要,它们包含了各种服务、工具、库和配置信息。下面,我们将根据给定的部分内容,详细介绍WebSphere下的关键JAR文件及它们的作用: 1. **AdminConfig.jar**:这个文件位于...

    JAR文件包及jar命令详解

    这个头指定了JAR文件中的主类,即程序的入口点,当以可执行方式运行JAR文件时,Java虚拟机(JVM)会找到并执行这个类的`public static void main(String[] args)`方法。 3. 创建可执行的JAR文件包 要创建一个可...

    jar在命令行下运行空指针异常解决

    当我们在命令行环境中执行一个JAR文件时遇到空指针异常,可能的原因通常包括但不限于以下几点: 1. **环境变量配置不当**:如果Java的环境变量设置不正确或者没有完全配置好,比如`JAVA_HOME`未设置或者`PATH`变量...

    windows运行jar包和开机自动启动.docx

    1. 使用.bat 文件运行 JAR 包 _create a .bat file in the same directory as the JAR file, edit the command, and double-click to run it. The contents of the .bat file are as follows: @echo off java -...

    jar文件如何打开或者jar文件关联到java

    完成上述操作后,双击任何JAR文件都应能直接启动Java运行时环境,并执行该文件中的程序。如果出现问题,可以检查快捷方式的路径是否正确,以及是否成功将`.jar`文件类型与快捷方式关联。 通过上述步骤,不仅能够...

Global site tag (gtag.js) - Google Analytics