java 获取bin目录_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


版权声明:本文为weixin_42583683原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。