精华内容
下载资源
问答
  • Java程序中获取当前运行程序路径Java程序中获取当前运行程序路径Java程序中获取当前运行程序路径Java程序中获取当前运行程序路径
  • 获取Java程序运行路径

    千次阅读 2019-07-04 09:59:06
    System.getProperty("java.class.path")//这个方法可以获取当前运行程序的完整路径,绝对的路径,并且适应操作系统,无需处理,更加high的是,,哪怕你把jar文件弄成了exe文件,都可以获取,但是得到的是本jar包位置和引用...

     

    网上很多人介绍了各种获取的方法,但是获取都不大好,一大番处理.我引荐了一个非常好的例子

    System.getProperty("java.class.path")//这个方法可以获取当前运行程序的完整路径,绝对的路径,并且适应操作系统,无需处理,更加high的是,,哪怕你把jar文件弄成了exe文件,都可以获取,但是得到的是本jar包位置和引用的jar包位置格式类似这种,我这使用split(';')这样分割后的

    System.getProperty("usr.dir")//获取当前运行程序的完整目录,配合上面那个使用,相信问题都没了.   仅限linux

     

    ------------以下是摘自别人的----------------

    对于Java程序,无论是未打包的还是打包的JAR或WAR文件,有时候都需要获取它运行所在目录信息,如何做到这一点呢? 

    在Java处理的文件系统中,目录的表示方式有两种: 

    (1)绝对目录,它以"/"为起始字符,代表从根目录下开始寻找给出的目录,如/c:/java 

    (2)相对路径,它以不带“/”的目录名表示,表示以当前Java程序正在运行的目录作为起始目录来寻找给出的目录。如java/classes。在相对路径中,有一些特定的字符,可以代表特的的目录,比如,“.”代表当前目录,“..”代表当前目录的上一级目录。在网上很多给出的例子中,就是利用"."作为目录名,构造File对象的实例,然后通过File对象的方法来获取当前程序运行的目录。 

        这种方法虽然简单,但有时不能正确的得出当前程序的运行目录。原因在于,运行Java程序不一定要进入到该程序的类文件或JAR文件所在的目录,只要在运行时指定了正确的类路径信息,就可以在任何目录中运行Java程序,此时利用这种方法只能得到发出运行命令时所在的目录信息。 

         从上面的分析可以看出,对于很多Java程序,尤其是WEB程序,利用当前路径的“.”表示法,都不能满足要求。那么怎样才能正确的得到运行目录信息呢? 

         在Web程序中,利用Servlet API可以获得一些路径信息,比如HttpServletRequest接口中定义的getRealPath方法,但类似这些方法都依赖于Servlet环境,不便于程序的单元测试。 

        本文提供了一种只使用Java标准API的路径探测方法,就是利用ClassLoader抽象类。 

        利用java.lang.Class的getClassLoader方法,可以获得给定类的ClassLoader实例,它的getResource方法可以获得当前类装载器中的资源的位置,我们可以利用类文件的名称作为要查找的资源,经过处理后就可获得当前Java程序的运行位置信息,其伪代码如下: 
        
        获得Class参数的所在的类名 
        取得该类所在的包名 
        将包名转换为路径 
        利用getResource得到当前的类文件所在URL 
        利用URL解析出当前Java程序所在的路径 
      
       具体代码如下:

     /**-----------------------------------------------------------------------
         *getAppPath需要一个当前程序使用的Java类的class属性参数,它可以返回打包过的
         *Java可执行文件(jar,war)所处的系统目录名或非打包Java程序所处的目录
         *@param cls为Class类型
         *@return 返回值为该类所在的Java程序运行的目录
         -------------------------------------------------------------------------*/
        public static String getAppPath(Class cls){
            //检查用户传入的参数是否为空
            if(cls==null) 
             throw new java.lang.IllegalArgumentException("参数不能为空!");
            ClassLoader loader=cls.getClassLoader();
            //获得类的全名,包括包名
            String clsName=cls.getName()+".class";
            //获得传入参数所在的包
            Package pack=cls.getPackage();
            String path="";
            //如果不是匿名包,将包名转化为路径
            if(pack!=null){
                String packName=pack.getName();
               //此处简单判定是否是Java基础类库,防止用户传入JDK内置的类库
               if(packName.startsWith("java.")||packName.startsWith("javax.")) 
                  throw new java.lang.IllegalArgumentException("不要传送系统类!");
                //在类的名称中,去掉包名的部分,获得类的文件名
                clsName=clsName.substring(packName.length()+1);
                //判定包名是否是简单包名,如果是,则直接将包名转换为路径,
                if(packName.indexOf(".")<0) path=packName+"/";
                else{//否则按照包名的组成部分,将包名转换为路径
                    int start=0,end=0;
                    end=packName.indexOf(".");
                    while(end!=-1){
                        path=path+packName.substring(start,end)+"/";
                        start=end+1;
                        end=packName.indexOf(".",start);
                    }
                    path=path+packName.substring(start)+"/";
                }
            }
            //调用ClassLoader的getResource方法,传入包含路径信息的类文件名
            java.net.URL url =loader.getResource(path+clsName);
            //从URL对象中获取路径信息
            String realPath=url.getPath();
            //去掉路径信息中的协议名"file:"
            int pos=realPath.indexOf("file:");
            if(pos>-1) realPath=realPath.substring(pos+5);
            //去掉路径信息最后包含类文件信息的部分,得到类所在的路径
            pos=realPath.indexOf(path+clsName);
            realPath=realPath.substring(0,pos-1);
            //如果类文件被打包到JAR等文件中时,去掉对应的JAR等打包文件名
            if(realPath.endsWith("!"))
                realPath=realPath.substring(0,realPath.lastIndexOf("/"));
          /*------------------------------------------------------------
           ClassLoader的getResource方法使用了utf-8对路径信息进行了编码,当路径
            中存在中文和空格时,他会对这些字符进行转换,这样,得到的往往不是我们想要
            的真实路径,在此,调用了URLDecoder的decode方法进行解码,以便得到原始的
            中文及空格路径
          -------------------------------------------------------------*/
          try{
            realPath=java.net.URLDecoder.decode(realPath,"utf-8");
           }catch(Exception e){throw new RuntimeException(e);}
           return realPath;
        }//getAppPath定义结束

     

    1. 不要传递系统的类,作为getAppPath的参数,如java.lang.String.class,当然,也不要传递那些已经位于JDK中的那些类,比如xml相关的一些类等等。
    2. 要传递应该是程序中主要的运行类,不要传递程序中的支持类库中的类文件,也就是那些第三方的类库中的类文件,否则得到的将是那些类库的位置。

     

     

    原文

    https://blog.csdn.net/u012142247/article/details/79737204

    展开全文
  • Java 获取运行程序安装路径

    千次阅读 2018-11-06 18:54:36
    System.getProperty("user.dir");  
    System.getProperty("user.dir");

     

    展开全文
  • Properties java.lang.System.getProperties()的注释中有对”java.home”属性的说明:” Java installation directory “,很简单,就是java安装路径。 如果你要想在运行时获取当前java虚拟机所在的位置,通过System...

    Properties java.lang.System.getProperties()的注释中有对”java.home”属性的说明:” Java installation directory “,很简单,就是java安装路径。
    如果你要想在运行时获取当前java虚拟机所在的位置,通过System.getProperty(“java.home”)调用并不能获取准确的位置。
    比如:
    eclipse中将jre主目录设置为”C:\Program Files\Java\jdk1.8.0_111”,执行的jvm应该是”C:\Program Files\Java\jdk1.8.0_111\bin\java.exe”
    但调用System.getProperty(“java.home”)返回的结果为”C:\Program Files\Java\jdk1.8.0_111\jre”
    eclipse中将jre主目录设置为”C:\Program Files\Java\jdk1.8.0_111\jre”,执行的jvm应该是”C:\Program Files\Java\jdk1.8.0_111\jre\bin\java.exe”
    但调用System.getProperty(“java.home”)返回的结果仍然是”C:\Program Files\Java\jdk1.8.0_111\jre”

    也就是说”java.home”属性是一个固定的值,不会因为你执行java程序时使用的虚拟机是jre\bin\java.exe还是bin\java.exe而有什么不同。

    所以java程序要想知道自己当前所在虚拟机的位置,是不能通过”java.home”属性来获取的。
    因为Windows下可执行程序(.exe)搜索动态库(DLL)时首先搜索的就是它自己所在的路径,所以JVM运行时,它首先搜索的路径也就是包含java.exe的路径,所以这个路径也是”java.library.path”属性中第一个路径;
    所以可以利用这个特性,通过”java.library.path”属性来间接获取jvm的位置。
    下面是测试代码TestJVM.java

    package testwb;
    
    public class TestJVM {
        public static void main(String[] args) {
            String javaHome = System.getProperty("java.home");
            System.out.println(javaHome);
            final String javaLibraryPath = System.getProperty("java.library.path");
            System.out.println(javaLibraryPath);
            String jvmFolder = javaLibraryPath.substring(0, javaLibraryPath.indexOf(';'));
            System.out.println(jvmFolder);
        }
    }

    输出

    C:\Program Files\Java\jdk1.8.0_111\jre
    C:\Program Files\Java\jdk1.8.0_111\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;…(省略)
    C:\Program Files\Java\jdk1.8.0_111\bin

    注意
    这个办法只在Windows平台下有用,在Linux下是不行的,同样上面的代码(要将indexOf(‘;’)中的’;’改成’:’号),在ubuntu下输出是

    /usr/lib/jvm/java-8-openjdk-amd64/jre
    /usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86…(省略)
    /usr/java/packages/lib/amd64

    参考:
    http://stackoverflow.com/questions/9006127/find-absolute-java-exe-path-programatically-from-java-code

    展开全文
  • Java获取当前程序路径

    千次阅读 2018-08-22 15:05:38
    import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; /* java.version Java 运行时环境版本 java.vendor Java 运行时环境供应商 ...
    import java.net.MalformedURLException;   
    import java.net.URI;   
    import java.net.URISyntaxException;  
    import java.net.URL;  
    /*
    java.version          Java 运行时环境版本 
    java.vendor         Java 运行时环境供应商  
    java.vendor.url         Java 供应商的 URL  
    java.vm.specification.version         Java 虚拟机规范版本 
    java.vm.specification.vendor         Java 虚拟机规范供应商 
    java.vm.specification.name         Java 虚拟机规范名称 
    java.vm.version         Java 虚拟机实现版本 
    java.vm.vendor         Java 虚拟机实现供应商 
    java.vm.name         Java 虚拟机实现名称 
    java.specification.version         Java 运行时环境规范版本 
    java.specification.vendor         Java 运行时环境规范供应商 
    java.specification.name         Java 运行时环境规范名称 
    os.name         操作系统的名称 
    os.arch         操作系统的架构 
    os.version         操作系统的版本 
    file.separator         文件分隔符(在 UNIX 系统中是“ / ”) 
    path.separator         路径分隔符(在 UNIX 系统中是“ : ”) 
    line.separator         行分隔符(在 UNIX 系统中是“ /n ”) 
    java.home         Java 安装目录 
    java.class.version         Java 类格式版本号 
    java.class.path         Java 类路径 
    java.library.path          加载库时搜索的路径列表 
    java.io.tmpdir         默认的临时文件路径 
    java.compiler         要使用的 JIT 编译器的名称 
    java.ext.dirs         一个或多个扩展目录的路径 
    user.name         用户的账户名称 
    user.home         用户的主目录 
    user.dir 
    */  
    public class Test {  
            public static void main(String[] args) throws MalformedURLException, URISyntaxException {  
                    System.out.println("java.home : "+System.getProperty("java.home"));  
                    System.out.println("java.class.version : "+System.getProperty("java.class.version"));  
                    System.out.println("java.class.path : "+System.getProperty("java.class.path"));  
                    System.out.println("java.library.path : "+System.getProperty("java.library.path"));  
                    System.out.println("java.io.tmpdir : "+System.getProperty("java.io.tmpdir"));  
                    System.out.println("java.compiler : "+System.getProperty("java.compiler"));  
                    System.out.println("java.ext.dirs : "+System.getProperty("java.ext.dirs"));  
                    System.out.println("user.name : "+System.getProperty("user.name"));  
                    System.out.println("user.home : "+System.getProperty("user.home"));  
                    System.out.println("user.dir : "+System.getProperty("user.dir"));  
                    System.out.println("===================");  
                    System.out.println("package: "+Test.class.getPackage().getName());  
                    System.out.println("package: "+Test.class.getPackage().toString());  
                    System.out.println("=========================");  
                    String packName = Test.class.getPackage().getName();  
                    /*URL packurl = new URL(packName);
                    System.out.println(packurl.getPath());*/  
                    URI packuri = new URI(packName);  
                    System.out.println(packuri.getPath());  
                    //System.out.println(packuri.toURL().getPath());  
                    System.out.println(packName.replaceAll("//.", "/"));  
                    System.out.println(System.getProperty("user.dir")+"/"+(Test.class.getPackage().getName()).replaceAll("//.", "/")+"/");  
            }  
    }   
    展开全文
  • JAVA运行时,获取运行路径和JRE路径

    千次阅读 2019-10-18 11:18:33
    代码如下: System.getProperty("user.dir"); System.getProperty("java.home");
  • 获取Java程序运行路径 | 获取当前jar包的路径 转自 Itype 用户snoopy7713 http://marsvaadin.iteye.com/blog/1671046 不管是否是 Jar 包,不管是否是 Tomcat 部署,以下三个方法均可实现。 package test;public ...
  • java命令后加绝对路径无法运行

    千次阅读 2018-10-15 16:16:41
    今天一个不会java的朋友也不知道从哪整了一个java文件让我帮忙运行一下,我就直接把这个.java文件复制到桌面然后打开cmd命令行工具,第一步(javac + java文件的绝对路径)编译好使,第二步(java + class文件的绝对...
  • java 如何获取程序运行时的相对路径

    千次阅读 2017-11-10 09:03:52
    有时候需要在程序中操作本地文件,比如读取配置信息,为了能在不同的机器上运行程序,需要获取程序运行时的相对路径,这样方便找到文件的位置,方法如下: [java] view plain copy print? String...
  • 如何知道当前java程序运行路径

    千次阅读 2011-08-17 15:16:22
    现象:对于初学者来说,引用一些资源的时候使用相对路径经常遇到问题,但却不知道当前的路径到底是在哪里,相对路径要怎么写。 解决: System.out.println(System.getProperty("user.dir"));
  • 最近在做项目的时候,自己写了一些配置参数的读取,将配置文件放到具体的位置,然后让程序根据当前类的路径寻找配置文件的路径,但是,发现eclipse的开发坏境下是可以顺利读取到指定路径下的配置文件中的配置参数的...
  • Java 如何获取程序运行时的相对路径

    千次阅读 2012-03-22 17:18:12
    有时候需要在程序中操作本地文件,比如读取配置信息,为了能在不同的机器上运行程序,需要获取程序运行时的相对路径,这样方便找到文件的位置,方法如下: String ProjectPath=XXX.class.getProtectionDomain()....
  • java web 获取当前的运行路径的方法

    千次阅读 2018-01-21 14:55:27
    在web开发中,如果需要配置额外的xml属性文件。...下面介绍几种获取当前项目运行路径的方法。  1、URL url = T.class.getProtectionDomain().getCodeSource().getLocation();   例如:URL url = CrmBus
  • linux查看java运行程序所在目录

    千次阅读 2020-12-21 15:26:00
    jps -l获取pid ll /proc/pid 可以得到目录
  • 描述: 打开cmd,输入javajava -version没有问题,但是javac提示不是... 看看java 相关的java相关路径有没有多余的符号,比如多出分号,逗号(笔者上面是正确的路径展示形式) 看看下载的解压后java目录对不对 ...
  • Java入门

    千次阅读 多人点赞 2019-04-06 18:54:50
    重点:Java平台无关性、Java程序的结构。 难点:Java程序的开发过程。 Java之父与Java的诞生 Java是1995年6月由Sun公司引进到我们这个世界的革命性的编程语言。1990年Sun公司成立了由James Gosling领导的开发小组,...
  • Java 关于获取webapp路径问题

    万次阅读 2017-09-21 09:28:50
    1.可以在servlet的init方法里 ... 这将获取web项目的全路径 例如 :E:\eclipseM9\workspace\tree\ tree是我web项目的根目录 2.你也可以随时在任意的class里调用 this.getClass().getClassLoader().getResourc
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...
  • JAVA表白小程序

    千次阅读 多人点赞 2020-03-07 21:32:24
    如题,微信表白小程序 分析 3.7号,我们是女生节,班级准备给女生点礼物,我的直男想法就想到了抖音那种表白小程序,感觉或许挺好玩的,就开始制作了 制作前先想想用什么语言写比较好.备选项有Python,JAVA,Androidc,c++...
  • JAVA应用程序获取当前路径

    万次阅读 2011-12-16 11:26:49
    如果对于类不在包内:利用System.getProperty("user.dir")和this.getClass().getResource("")获取的路径是一样的, 但是对于类在包内的情况就不同了:System.getProperty("user.dir")取得的是包所在的路径,而this....
  • java退出程序

    千次阅读 2018-12-24 21:45:49
    是一个javaweb项目,根据客户服务器的mac地址,公司名称以及使用期限做一个限制性的功能;  做到最后一步,关闭tomcat总是不行,关闭不了。也百度了很多代码比如: ...import java.io.BufferedReader; import j...
  • 关于Java文件路径在Windows和Linux中的问题~
  • 本篇文章通过我和三妹的对话来谈一谈“Java程序在编译和运行时发生了什么”。 没见过这么有趣的标题吧?“语不惊人死不休”,没错,本篇文章的标题就是这么酷炫,接受不了的同学就别点进来看了,所谓好奇心害死猫;...
  • 这里搜集了网上三种获取运行路径的方法,写了个工具类,具体如下: package com.zgd.jar.utils; import com.zgd.jar.App; import java.io.File; import java.io.IOException; import java.net.URL; import java.net....
  • Java中文件路径及其访问

    千次阅读 2014-04-14 20:11:50
    首先来看Java中的4种相对路径
  • 使用指定JDK运行JAVA程序

    万次阅读 2017-09-21 00:10:54
    使用bat脚本执行Java程序时,可能由于需要使用比本地更高版本的Java环境来运行,所以需要使用指定的JRE环境 例如: set path = C:/jdk1.7.0_51 set classpath=C:/jdk1.7.0_51/jre/lib java -Xms256m -Xmx256m...
  • 大家知道,在默认情况下,Java程序在编译和运行的时候,会通过JRE下的rt.jar文件和CLASSPATH环境变量所指定的路径进行类的搜索和加载,但是如果有时需要动态为Java程序指定类加载路径,那该怎么办? 有的时候,为了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 505,436
精华内容 202,174
关键字:

java运行程序路径

java 订阅