`
snoopy7713
  • 浏览: 1122231 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

获取Java程序运行的路径 | 获取当前jar包的路径

    博客分类:
  • java
阅读更多

经过试验,不管是否是 Jar 包,不管是否是 Tomcat 部署,以下三个方法均可实现。

 

package test;

 

public class MyPath {

    public static String getProjectPath() {

 

       java.net.URL url = MyPath.class .getProtectionDomain().getCodeSource().getLocation();

       String filePath = null ;

       try {

           filePath = java.net.URLDecoder.decode (url.getPath(), "utf-8");

       } catch (Exception e) {

           e.printStackTrace();

       }

    if (filePath.endsWith(".jar"))

       filePath = filePath.substring(0, filePath.lastIndexOf("/") + 1);

    java.io.File file = new java.io.File(filePath);

    filePath = file.getAbsolutePath();

    return filePath;

}

 

    public static String getRealPath() {

       String realPath = MyPath.class .getClassLoader().getResource("").getFile();

       java.io.File file = new java.io.File(realPath);

       realPath = file.getAbsolutePath();

       try {

           realPath = java.net.URLDecoder.decode (realPath, "utf-8");

       } catch (Exception e) {

           e.printStackTrace();

       }

 

       return realPath;

    }

 

    public static String getAppPath(Class<?> cls){ 

       //检查用户传入的参数是否为空 

        if (cls==null )  

        throw new java.lang.IllegalArgumentException("参数不能为空!"); 

 

        ClassLoader loader=cls.getClassLoader(); 

        //获得类的全名,包括包名 

        String clsName=cls.getName();

        //此处简单判定是否是Java基础类库,防止用户传入JDK内置的类库 

        if (clsName.startsWith("java.")||clsName.startsWith("javax.")) {

        throw new java.lang.IllegalArgumentException("不要传送系统类!");

        }

        //将类的class文件全名改为路径形式

        String clsPath= clsName.replace(".", "/")+".class"; 

 

        //调用ClassLoader的getResource方法,传入包含路径信息的类文件名 

        java.net.URL url =loader.getResource(clsPath); 

        //从URL对象中获取路径信息 

        String realPath=url.getPath(); 

        //去掉路径信息中的协议名"file:" 

        int pos=realPath.indexOf("file:"); 

        if (pos>-1) {

        realPath=realPath.substring(pos+5); 

        }

        //去掉路径信息最后包含类文件信息的部分,得到类所在的路径 

        pos=realPath.indexOf(clsPath); 

        realPath=realPath.substring(0,pos-1); 

        //如果类文件被打包到JAR等文件中时,去掉对应的JAR等打包文件名 

        if (realPath.endsWith("!")) {

        realPath=realPath.substring(0,realPath.lastIndexOf("/"));

        }

        java.io.File file = new java.io.File(realPath);

        realPath = file.getAbsolutePath();

 

        try

        realPath=java.net.URLDecoder.decode (realPath,"utf-8"); 

        }catch (Exception e){

        throw new RuntimeException(e);

        } 

        return realPath; 

    }//getAppPath定义结束 

}

 

使用Jar包,在Tomcat的运行结果如下:

ProjectPath: D:\J2EE\Tomcat 6.0\webapps\MyService1WebP\WEB-INF\lib

RealPath: D:\J2EE\Tomcat 6.0\webapps\MyService1WebP\WEB-INF\classes

Apppath: D:\J2EE\Tomcat 6.0\webapps\MyService1WebP\WEB-INF\classes

posted @ 2012-08-25 23:05 蜗牛先生驾到 阅读(6) 评论(0) 编辑

 

java.version

Java  运行时环境版本

java.vendor

Java  运行时环境供应商

java.vendor.url

Java  供应商的 URL

java.home

Java  安装目录

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  运行时环境规范名称

java.class.version

Java  类格式版本号

java.class.path

Java  类路径

java.library.path

加载库时搜索的路径列表

java.io.tmpdir

默认的临时文件路径

java.compiler

要使用的 JIT 编译器的名称

java.ext.dirs

一个或多个扩展目录的路径

os.name

操作系统的名称

os.arch

操作系统的架构

os.version

操作系统的版本

file.separator

文件分隔符(在 UNIX 系统中是“/”)

path.separator

路径分隔符(在 UNIX 系统中是“:”)

line.separator

行分隔符(在 UNIX 系统中是“/n”)

user.name

用户的账户名称

user.home

用户的主目录

user.dir

用户的当前工作目录

 

 

获取的代码示例:

 

[java]  view plain copy
  1. public   class  SystemProperty {  
  2.     public   static   void  main(String args[]) {     
  3.     System.out.println("java_vendor:"  + System.getProperty( "java.vendor" ));     
  4.     System.out.println("java_vendor_url:"      
  5.              + System.getProperty("java.vendor.url" ));     
  6.     System.out.println("java_home:"  + System.getProperty( "java.home" ));     
  7.     System.out.println("java_class_version:"      
  8.              + System.getProperty("java.class.version" ));     
  9.     System.out.println("java_class_path:"      
  10.             + System.getProperty("java.class.path" ));     
  11.     System.out.println("os_name:"  + System.getProperty( "os.name" ));     
  12.     System.out.println("os_arch:"  + System.getProperty( "os.arch" ));     
  13.     System.out.println("os_version:"  + System.getProperty( "os.version" ));     
  14.     System.out.println("user_name:"  + System.getProperty( "user.name" ));     
  15.     System.out.println("user_home:"  + System.getProperty( "user.home" ));     
  16.     System.out.println("user_dir:"  + System.getProperty( "user.dir" ));     
  17.     System.out.println("java_vm_specification_version:"      
  18.             + System.getProperty("java.vm.specification.version" ));     
  19.     System.out.println("java_vm_specification_vendor:"      
  20.             + System.getProperty("java.vm.specification.vendor" ));     
  21.     System.out.println("java_vm_specification_name:"      
  22.             + System.getProperty("java.vm.specification.name" ));     
  23.     System.out.println("java_vm_version:"      
  24.             + System.getProperty("java.vm.version" ));     
  25.     System.out.println("java_vm_vendor:"      
  26.             + System.getProperty("java.vm.vendor" ));     
  27.     System.out     
  28.             .println("java_vm_name:"  + System.getProperty( "java.vm.name" ));     
  29.     System.out.println("java_ext_dirs:"      
  30.             + System.getProperty("java.ext.dirs" ));     
  31.     System.out.println("file_separator:"      
  32.             + System.getProperty("file.separator" ));     
  33.     System.out.println("path_separator:"      
  34.             + System.getProperty("path.separator" ));     
  35.     System.out.println("line_separator:"      
  36.             + System.getProperty("line.separator" ));     
  37. }     

 

=======================================================================

System.setProperties( "proxySet", "true" ); 
System.setProperties( "proxyHost", "192.168.31.117" ); 
System.setProperties( "proxyPort", "80" ); 
这里的proxySet,proxyHost,proxyPort等等这些系统的属性名称是从哪里知道的?

  ——通过JDK文档中对java.lang.system的static Properties getProperties()方法的介绍,可以获知所有可用属性的含义。

  ——根本没有proxySet,proxyHost和proxyPort, 这些是user defined property,那么用户定义的属性如何起作用的?

***JavaVM实现Proxy的方法***

      要想让java应用使用代理连接网络,只需要设置一下system properties,有两种方法可以设置,一是直接在java代码里面调用System.setProperty()方法,还有就是通过-D选项添加 java虚拟机参数,如  java -Dhttp.proxyHost=192.168.254.254     -Dhttp.proxyPort=9000 ,当然也可以指定不使用代理访问的网站或者主机,http.nonProxyHosts属性指定不使用代理访问的域。示例如下所示:

      System.setProperty("http.proxyHost", "192.168.254.254");

      System.setProperty("http.proxyPort", "9000");

      System.setProperty("http.nonProxyHosts", "localhost");

      如果你想使用ftp代理可以以相同的方式设定如下系统属性:ftp.proxyHost, ftp.proxyPort , and 使用socket代理可以设定socks.ProxyHost socks.ProxyPort 也可以使用如下代码:

  1. Properties sysProperties = System.getProperties();   
  2. //Specify proxy settings   
  3. sysProperties.put("proxyHost", "myhost");//myhost设置为代理的地址   
  4. sysProperties.put("proxyPort", "myport");//myport设置为代理端口  
  5. sysProperties.put("proxySet",  "true");  

补充:

      Java网络代理服务器环境变量
      Java 是一种面向对象的网络语言,Java 的JVM已经提供了可以设置与网络代理服务相关的环境变量,这些环境变量是按照键值名(Key)和值(Value)实现配置的。而这些环境变量与应用程序 息息相关。比如:大家比较熟悉的classpath环境变量等。从表面上看,JVM的环境变量有点类似Windows的*.ini,该环境变量是按照纯文 本的格式存储的。

      Http 代理服务是目前Internet环境下,应有最为广泛的代理服务。一般的网络浏览器,如:微软的IE和网景的Netscape都提供对Http代理服务的 配置选项。在Java应用程序中,对Http代理服务的使用是通过配置Java 虚拟机的JVM的环境变量来实现的。针对http代理服务,Java 虚拟机提供了如下环境变量:

      http.proxySet 该环境变量用以设置应用程序是否使用http协议代理,值为True/False。 
            注意:在设置环境变量时候,变量值True/False是按照字符串的形式进行设置的。 
      http.proxyHost 该环境变量用以设置应用程序所使用的http协议代理服务器的主机,比如:我们使用 http://172.14.10.34  作为http的代理服务器主机。 
      http.proxyport 该环境变量用以设置应用程序所使用的http协议代理服务器的主机的端口号。比如:我们使用 http://172.14.10.34  的8080端口作为http的代理服务器。

如:将Java应用程序的Http代理服务器设为http://172.14.10.34 ,端口为8080,可以使用如下代码: 
String host="http://172.14.10.34 ";
String port="8080";
System.setproperty("http.proxySet", "true");
System.setproperty("http.proxyHost", host);
System.setproperty("http.proxyport", port);


一旦设置好了Java应用程序的http代理环境变量,Java应用程序就可以通过http代理服务透明地访问与http相关的网络资源。

 

分享到:
评论

相关推荐

    windows运行jar包指定jdk路径

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

    用于修改jar文件包路径

    重新打包(重命名)的工具,在jar包重复的情况下使用。 这里我们以 gson.jar 为例,在 gson.jar 包目录下新建一个文本文件,名字随意,例如 rule.... java -jar jarjar.jar process rule.txt gson.jar mygson.jar 命令

    解决java打包之后无法加载静态资源的问题SWTResourceManager.java源码

    这是因为通过class.getResource()方法在IDEA中运行的路径和生成jar包获取的的路径是不同的。打成jar包后,获取图片的路径中有"xxx.jar!"这里面的内容是不能够被操作系统识别出来的,因此直接通过路径来获取文件是不...

    通过java的反射技术获取,某个包路径下的类,并以表格形式打印类的属性注解注释及属性名称等

    通过java的反射技术获取,某个包路径下的类,并以表格形式打印类的属性注解及属性名称等,打印的结果以|分隔,复制到excel表格后,可以设置分列成需要的excel表格

    Java读取Excel文件jar包

    Java读取xls、CSV、xlsx文件所用到的jar包,包括:opencsv-2.3.jar、poi-3.7-20101029.jar、poi-ooxml-3.7-20101029.jar

    java程序双击运行-双击jar文件运行程序.pdf

    java程序双击运⾏_双击jar⽂件运⾏程序 Java应⽤程序jar⽂件可以由 JVM(Java虚拟机)直接执⾏,只要操作系统安装了JVM便可以运⾏作为Java应⽤程序的jar⽂件。可是,很多 朋友遇到⼀个难题,那就是下载了jar⽂件以后在...

    java使用ffmpeg的jar包

    -Dfile=E:\jave-1.0.2.jar //包的输入路径 -DgroupId=jave -DartifactId=jave -Dversion=1.0.2 -Dpackaging=jar //执行完成后 jar 会放入maven 仓库中 maven/repository/jave/jave/1.0.2/

    读取分析Excel所有jar包和java示例文件

    本资源包换所有读取分析excel的jar包和我写的用这些包读取分析excel文件的两个.java文件。

    bat一键启动多个jar包

    @echo off start "api-gateway网关" /D "D:\jianguan\houduan\yssjar-201902242125" java -Xmx1024M -Xms128M -jar api-gateway-1.0-SNAPSHOT.jar & .../D 后面的是jar包所在路径,后边的就是jar包运行命令了

    java压缩(解压)文件jar包

    Apache的java压缩(解压)文件jar包; jar包的名字有些别扭叫ant.jar

    C#调用Java程序Jar的实现方法

    文档详细描述了C#调用Java程序Jar包的实现方法

    服务器使用Nginx部署Springboot项目的详细教程(jar包)

    1,将java项目打成jar包 这里我用到的是maven工具 这里有两个项目,打包完成后一个为demo....cd到jar包路径下执行:nohup java -jar demo.jar &gt;temp.txt & 执行启动完两个jar包后使用ip与端口号访问接口 (注:测试接

    java打包exe 更换图标

     配置好launcher.cfg后,双击launch.exe即可运行java应用程序。 注意点:执行.exe文件时候会先找跟.exe文件同名的.cfg配置文件,如果没有则会找launcher.cfg文件。所以可以在同一个文件目录下有多个exe可执行文件,...

    jar包反编译工具

    jar包反编译工具 很实用! 功能特点: 1、XJad是基于Jad核心的Java源程序反编译软件,内置Jad1.5.8e2; 2、可处理多个*.class文件,可以... 并将源文件带包路径信息保存至当前文件夹下名称为“~” + *.jar 的文件夹中;

    spring-4.3jar包.zip

    java jar包,亲测试可用 安全,可以对其进行数字签名,只让能够识别数字签名的用户使用里面的东西。 加快下载速度; 压缩,使文件变小,与ZIP压缩机制完全相同。 包封装。能够让JAR包里面的文件依赖于统一版本的...

    Java初学者---Java的学习路径教程

    JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的JDK...

    使用C++语言实现基于JVMTI机制的 JAVA 代码 加密保护工具

    众所周知,Java编译后的Jar包和Class文件,可以轻而易举的使用反编译工具(如JD-GUI)进行反编译,拿到源码。为了保护自己发布的Jar包和Class文件,采用的方式大多是混淆方式,这种方式对于Class文件的加密是不彻底...

    ueditor-1.1.2.zip jar包

    java jar包,亲测试可用 安全,可以对其进行数字签名,只让能够识别数字签名的用户使用里面的东西。 加快下载速度; 压缩,使文件变小,与ZIP压缩机制完全相同。 包封装。能够让JAR包里面的文件依赖于统一版本的...

    protobuf-java完整包(jar+source+javadoc)

    protobuf-java完整包(jar+source+javadoc+本地编译器),难得资源,直接导入可用! 使用教程: 1. 编辑build.bat,根据build.bat内设置的路径,把.proto文件放到相应的文件夹内,执行build.bat即可把.proto文件编译...

    javacv-1.3.2.jar中文文档.zip

    javacv-***.jar中文文档.zip,java,javacv-***.jar,org.bytedeco,javacv,***,cl.eye,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,bytedeco,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法:...

Global site tag (gtag.js) - Google Analytics