`
snoopy7713
  • 浏览: 1148928 次
  • 性别: 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相关的网络资源。

 

分享到:
评论

相关推荐

    在Java程序中获取当前运行程序的路径

    在Java编程语言中,获取当前运行程序的路径是一项常见的需求,这主要涉及到系统环境和程序资源的定位。本文将深入探讨如何在Java程序中获取这些信息,并提供多种方法来实现这一目标。 首先,我们可以通过`java.lang...

    编译运行java带jar包

    在Java编程环境中,有时...总结来说,编译和运行带有JAR包的Java程序涉及编译源代码、设置类路径、创建MANIFEST.MF文件指定主类、打包成JAR并最后运行JAR。通过使用IDE或构建工具,这个过程可以变得更加便捷和高效。

    java的jar包

    在实际项目开发中,将这些JAR包添加到项目的类路径(Classpath)中是至关重要的,因为Java虚拟机在运行时需要找到这些依赖才能正常工作。可以通过IDE(如Eclipse、IntelliJ IDEA)的构建工具(如Maven、Gradle)来...

    windows运行jar包指定jdk路径

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

    java程序如何打成jar包

    Java 程序打成 jar 包是将 Java 程序打包成一个可执行的文件,以便于用户直接运行程序,而不需要安装 JRE 环境和数据库。下面是将 Java 程序打成 jar 包的步骤。 首先,需要完成 Java GUI 程序的开发工作。在 ...

    用于修改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反射技术是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个技术主要基于Java.lang.reflect包中的类和接口,如Class、Constructor、Method和Field等。...

    JAVA打包成可运行的JAR程序

    JAVA打包成可运行的JAR程序 在 Java 开发中,为了方便程序的部署和分发,通常需要将程序打包成可执行的 JAR 文件。在这个过程中,需要注意几个重要的步骤,包括将依赖的 lib 包和配置文件正确地配置,生成 Class-...

    Java程序打包jar及exe所需文件

    在Java开发过程中,将程序打包成可执行的...通过以上步骤,我们可以将Java程序打包成jar或exe文件,方便用户下载和运行,同时也提高了软件的分发效率。在实际操作中,根据项目需求选择合适的打包工具和策略至关重要。

    java 程序打包成jar文件后 连接数据库出错(教程方法)

    在Java编程中,将程序打包成JAR文件是常见的部署方式,这使得代码可以作为一个独立的可执行单元进行分发。然而,在打包包含数据库连接的Java应用程序时,可能会遇到一些问题,尤其是涉及到像MySQL这样的外部数据库。...

    用bat运行java文件中引用了外部jar的java程序

    在IT行业中,我们经常需要处理各种编程任务,其中之一就是在命令行环境下运行包含外部jar依赖的Java程序。在Windows操作系统中,我们通常会使用批处理(BAT)文件来自动化这一过程。下面将详细介绍如何通过BAT文件...

    关于执行java命令引入外部jar包方法

    完成上述步骤后,即可在任何地方运行依赖于`mysqlJdbc.jar`的Java程序,无需在命令行中指定额外参数。 #### 方法2:使用`-cp`或`-classpath`参数 另一种更为灵活的方法是在执行Java命令时动态指定JAR包位置,即使...

    java集成kettle所有jar包

    然而,在Java应用程序中集成Kettle,需要将相关的Jar包添加到项目的类路径中,以便能够调用其API来执行工作流或转换。 首先,要理解Java与Kettle的集成,我们需要知道Kettle的主要组件。Kettle由以下几部分组成: ...

    编写java程序jar包

    Java程序的jar(Java Archive)包是Java平台特有的打包机制,它将多个类文件、资源文件和元数据打包成一个单一的可执行文件,便于分发、存储和执行。在Java开发中,jar包扮演着至关重要的角色,因为它使得代码模块化...

    java连接oracle数据库jar包

    你需要根据你的Java运行环境选择合适的JAR包。 要实现Java连接Oracle数据库,首先需要在项目中引入对应的JDBC驱动JAR包。这可以通过以下步骤完成: 1. 将下载的JDBC驱动JAR文件添加到项目的类路径中。如果你使用的...

    idea将Java项目打包Jar包生成exe应用程序.docx

    在IT行业中,将Java项目打包成可执行的jar或exe文件是常见的需求,特别是对于希望在没有Java环境的用户机器上运行的应用程序。本篇主要介绍如何使用IntelliJ IDEA(Idea)将Springboot或Java项目打包为jar,并通过...

    Java获取视频时间JAR包

    "Java获取视频时间JAR包"正是为了解决这个问题而设计的,它提供了一个Java库,允许开发者通过简单的API调用来获取视频文件的时长。下面将详细介绍这个JAR包的用途、工作原理以及如何在Java项目中使用它。 首先,让...

    java配置数据库jar包操作

    Java 配置数据库 Jar 包操作 Java 配置数据库 Jar 包操作是指在 Java 项目中将 MySQL 数据库的 Jar 包导入到项目中,以便使用 JDBC 连接数据库的操作。下面是关于 Java 配置数据库 Jar 包操作的详细知识点: 什么...

Global site tag (gtag.js) - Google Analytics