`

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中获取路径的方法。 ### 1. 获取系统属性路径 Java提供了一种通过系统属性获取路径的方式,这种方式简单且在多数环境下都能工作。 ```java // 获取用户目录路径 String userHome = ...

    java获取路径的各种方法

    本文将详细介绍Java中获取路径的几种方法,以及相对路径和绝对路径的基本概念。 首先,理解绝对路径和相对路径的概念至关重要。绝对路径是文件或目录在硬盘上的完整路径,无论起点在哪里都能准确地指向目标。例如,...

    JAVA获取各种路径总结

    - 下面的代码展示了几种获取路径的方法: ```java package org.cheng.file; import java.io.File; public class FileTest { public static void main(String[] args) throws Exception { System.out....

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

    ### 二、Java中获取路径的方法 #### 1. 使用`File`类 Java中的`File`类提供了丰富的API来处理文件和目录路径。例如,通过`this.getClass().getResource()`方法可以获取资源文件的路径。 ##### 示例代码: ```java ...

    java路径获得几种方法.txt

    本文将详细介绍几种获取Java路径的方法,并对每种方法的应用场景进行解释。 #### 二、获取路径的基本概念 在讨论具体方法之前,我们先了解几个基本概念: - **虚拟路径**:指的是Web应用中的逻辑路径,通常以`/`...

    JAVA中获取各种路径

    以下是对标题“JAVA中获取各种路径”及其描述和部分内答所提及的几种路径获取方法的详细解析。 ### 1. JSP中的路径获取 #### (1) 获取当前页面的完整路径:`request.getRequestURI()` 此方法返回客户端请求的当前...

    java文件路径获取

    本文将详细介绍Java中获取文件路径的各种方法及其应用场景,帮助开发者更好地理解和掌握这些技巧。 #### 二、基本概念 在深入讨论之前,我们需要了解几个基本概念: - **Classpath**: 是Java运行环境的一个重要...

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

    下面将详细介绍几种在Java中获取当前路径的方法。 1. 使用`System.getProperty()`函数: `System.getProperty("user.dir")`是获取当前工作目录的常用方式。这里的`user.dir`是一个系统属性,它指向了Java进程启动...

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

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

    JAVA获取项目路径.doc

    在Java中,`System.getProperty()` 方法是一个非常实用的方法,它可以从系统属性中获取指定键对应的值。当键为 `"user.dir"` 时,返回的是当前Java程序执行所在的目录路径。这种方式适用于大多数情况下的路径获取...

    java绝对路径和相对路径

    综上所述,在Java中获取各种路径的方法有很多,选择哪种方法取决于具体的应用场景和需求。在Web应用开发中,推荐使用`request.getRealPath`或`ServletContext`的`getRealPath`方法来获取绝对路径;而在一般的Java...

    java 获取项目文件路径实现方法

    这里我们将深入探讨几种不同的方法来实现这一目标,同时解析每种方法的适用场景和返回路径的特点。 1. `this.getClass().getResource("/").getPath().substring(1)` 这种方法返回的是项目的根目录路径。它通过加载...

    Java中获取类路径classpath的简单方法(推荐)

    本文将详细介绍在Java中获取类路径的几种常见方法,以供开发者参考。 首先,类路径(classpath)是Java应用程序在运行时查找和加载类的路径集合。它可以通过命令行选项 `-cp` 或 `-classpath` 在启动Java应用时指定...

    java读取配置文件

    在Java中,我们可以使用多种方法来读取配置文件,下面将详细介绍几种常见的方法。 1. **使用`java.io`流读取** 最基础的方式是使用Java的I/O流来读取文本配置文件(通常是.properties格式)。例如,`java.io....

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

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

    SPRING MVC 的请求参数获取的几种方法

    SPRING MVC 框架中,获取请求参数是非常重要的一步,下面将介绍 SPRING MVC 中获取请求参数的几种方法。 1. 使用 @PathVariable 注解获取路径中传递参数 在 SPRING MVC 中,可以使用 @PathVariable 注解获取路径中...

    Java获取工程路径方法详解

    文章提到了上述的几种方法,每种方法都有其适用场景,开发者可以根据需要选择合适的方法来获取路径。需要注意的是,在不同的开发环境中(比如IDE和命令行),这些方法返回的路径可能会有所不同。比如,在IDE中,...

    JSP中得到几种得到路径的方法

    以上介绍的五种方法分别适用于不同的情景。在实际开发中,理解并灵活运用这些路径获取技巧对于构建功能完整、性能优良的Web应用至关重要。例如,在页面跳转、资源加载、日志记录、文件上传下载等功能实现时,准确...

    java链接postgresql

    1. **JDBC**: JDBC是Java中用于与关系数据库交互的一组接口和类,它是Java标准的一部分,位于`java.sql`包中。JDBC提供了一种标准的API,使得Java开发者能够通过编写统一的代码来访问不同的数据库,无需关心底层...

Global site tag (gtag.js) - Google Analytics