`

java中获取路径的几种方法

阅读更多

//当前的classpath

System.out.println(Thread.currentThread().getContextClassLoader().getResource("./").getPath());
//Test.class文件所在路径 即包路径
System.out.println(Test.class.getResource(""));

1. 在Servlet\Filter等Servlet web环境中,只要获得javax.servlet.ServletContext类型,则可以通过 getRealPath("...") 获得路径。相对路径中最顶层目录可通过参数“"/"”获取。
request.getSession().getServletContext().getRealPath("/");

2. JSP自定义标签javax.servlet.jsp.tagext.TagSupport
((javax.servlet.ServletContext)pageContext).getRealPath("");

3. 普通Java Class对象文件中使用:
this.getClass().getResource("???");
如果Class文件在顶层目录(包)中,且“???”为空白字符串(“""”),及此方法在jar文件中执行则会返回null。在顶层目录(包)以下的各层目录(包)则会返回包含协议的URL。各层文件夹(包)之间使用“/”分隔。

项目位置:C:\project 目录。

文件位置:C:\project\Test.java
文件内容:
/* source begin. */
public class Test {

public Test () {
System.out.println(this.getClass().getResource(""));
System.out.println(this.getClass().getResource("."));
System.out.println(this.getClass().getResource("/"));
System.out.println(this.getClass().getResource("Test.class"));
System.out.println(this.getClass().getResource("/Test.class"));
System.out.println(this.getClass().getResource("./Test.class"));
System.out.println(this.getClass().getResource("com/Test.class"));
System.out.println(this.getClass().getResource("/com/Test.class"));
System.out.println(this.getClass().getResource("./com/Test.class"));
}

public static void main(String[] args) {
System.out.println("====== Test.class ======");
Test test = new Test();
System.out.println("====== com/Test.class ======");
com.Test com_test = new com.Test();
}
}
/* source end. */


文件位置:C:\project\com\Test.java
文件内容:
/* source begin. */
package com;
public class Test {

public Test () {
System.out.println(this.getClass().getResource(""));
System.out.println(this.getClass().getResource("."));
System.out.println(this.getClass().getResource("/"));
System.out.println(this.getClass().getResource("Test.class"));
System.out.println(this.getClass().getResource("/Test.class"));
System.out.println(this.getClass().getResource("./Test.class"));
System.out.println(this.getClass().getResource("com/Test.class"));
System.out.println(this.getClass().getResource("/com/Test.class"));
System.out.println(this.getClass().getResource("./com/Test.class"));
}

public static void main(String[] args) {
Test test = new Test();
}
}
/* source end. */

编译源代码:
假定%jdk_bin%为jdk/bin目录。
%jdk_bin%\javac test.java
%jdk_bin%\javac com\test.java

编译后在命令行窗口中运行:
假定%jdk_bin%为jdk/bin目录。
%jdk_bin%\java Test
显示结果:
====== Test.class ======
file:/C:/project/
file:/C:/project/
file:/C:/project/
file:/C:/project/Test.class
file:/C:/project/Test.class
file:/C:/project/Test.class
file:/C:/project/com/Test.class
file:/C:/project/com/Test.class
file:/C:/project/com/Test.class
====== com/Test.class ======
file:/C:/project/com/
file:/C:/project/com/
file:/C:/project/
file:/C:/project/com/Test.class
file:/C:/project/Test.class
file:/C:/project/com/Test.class
null
file:/C:/project/com/Test.class
null

打包成可执行Jar后在命令行窗口中运行:
假定%jdk_bin%为jdk/bin目录。
%jdk_bin%\java -jar Test.jar
显示结果:
====== Test.class ======
null
null
null
jar:file:/C:/project/test.jar!/Test.class
jar:file:/C:/project/test.jar!/Test.class
null
jar:file:/C:/project/test.jar!/com/Test.class
jar:file:/C:/project/test.jar!/com/Test.class
null
====== com/Test.class ======
jar:file:/C:/project/test.jar!/com/
null
null
jar:file:/C:/project/test.jar!/com/Test.class
jar:file:/C:/project/test.jar!/Test.class
null
null
jar:file:/C:/project/test.jar!/com/Test.class
null


另附:

打包成windows双击执行的Jar方法:
1. 在 c:\project 目录下新建 META-INF 目录,在 c:\project\META-INF 目录下新建 MANIFEST.MF 文件,手动生成jar文件的“标明清单(manifest)”。其中“Main-Class: Test”是声明双击jar文件后自动运行的类文件,其中这个类文件一定要有main方法,效果等于运行“java -jar test.jar”命令,但不显示DOS运行窗口。MANIFEST.MF 文件内容如下:
# source begin. #
Manifest-Version: 1.0
Sealed: true
Main-Class: Test
Class-Path:
# source end. #

2. 在命令行窗口中键入以下命令,其中%java_home%为java安装目录,cvfM中的M一定要大写,因为要明确要求jar文件使用我们自己创建的MANIFEST.MF文件,如果使用小写m,则 META-INF 目录及 MANIFEST.MF 由jar命令生成。
假定%jdk_bin%为jdk/bin目录。
%jdk_bin%\jar cvfM test.jar *.*

[参考2]目录树:
C:\project
+- com
| +- Test.class
|
+- META-INF
| +- MANIFEST.MF
|
+- Test.class

如果打包后的jar程序要运行,它必须包含一个清单文件manifest.mf,这个文件用记事本就可以打开,
这个文件里面有这么一个属性Main-Class:。
这个属性记录了这个jar包中拥有main方法的那个类,虚拟机就是先通过这个文件获得拥有main方法的类,然后首先加载这个类,
你的程序不能运行可能是缺少主类,一般一个程序可能包括几个jar包,而在这几个jar包中有且只有一个主类,主类在运行时调用其它jar包。

分享到:
评论

相关推荐

    总结一下java获取路径几种途径

    总结一下java获取路径几种途径。。。。。。。。。。。

    Java中获取文件路径的几种方式

    Java中获取文件路径的几种方式。 关于绝对路径和相对路径

    Java中获取当前路径的几种方法总结

    主要介绍了Java中获取当前路径的几种方法总结的相关资料,需要的朋友可以参考下

    java获取路径

    java获取路径 几种获取java路径的不同用法

    java获取当前路径的几种方法

    1、利用System.getProperty()函数获取当前路径:  System.out.println(System.getProperty(user.dir));//user.dir指定了当前的路径  2、使用File提供的函数获取当前路径:  File directory = new File(&#...

    java绝对路径和相对路径

    java获取路径几种途径,1、获取web服务器下的文件路径,2、获取本地路径,3、获取相对路径

    Java 中几种获取文件路径的方式

    Java 开发中我们经常要获取文件的路径,比如读取配置文件等等。今天我们就关于文件的路径和如何读取文件简单地探讨一下。 2. 文件的路径 文件的路径通常有 相对路径 与 绝对路径。 2.1 相对路径 以当前文件为基准...

    JAVA上百实例源码以及开源项目

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA上百实例源码以及开源项目源代码

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA面试题最全集

    76.EJB有哪几种?区别是什么? 77.JavaBean与EJB有什么区别? 78.软件开发生命周期有哪几个阶段? 79.软件开发有哪些因素? 80.软件开发中如何进行版本控制? 81.UML中,类视图如何表示类中的继承与聚合? 82.客户端...

    Java面试宝典2020修订版V1.0.1.doc

    1、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 56 2、sleep() 和 wait() 有什么区别? 56 3、当一个线程进入一个对象的一个synchronized方法后,其它线程...

    java开源包11

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包6

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包4

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包101

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包9

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包5

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包8

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包10

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

Global site tag (gtag.js) - Google Analytics