Java获取项目路径

在正常开发的情况下,我们经常会遇到:需要获取指定文件路径,虽然我知道项目在本机的路径,一旦打包发布了,再根据绝对路径获取指定文件,肯定是获取不到的。这时候就需要用java给我们提供的一些获取相对路径方法了。

@Test
public void url() throws IOException {
    // 获取当前项目下路径:方式一
    File file = new File("");
    String filePath = file.getCanonicalPath();
    // 输出:D:\MyCode\log\log4j2-java
    System.out.println(filePath);

    // 获取当前项目下路径:方式二
    // 输出:D:\MyCode\log\log4j2-java
    System.out.println(System.getProperty("user.dir"));

    // 获取类加载的根路径
    String path = this.getClass().getResource("/").getPath().substring(1);
    // 输出:D:/MyCode/log/log4j2-java/target/classes/
    System.out.println(path);

    // 获取当前类的所在工程路径
    String path1 = this.getClass().getResource("").getPath().substring(1);
    // 输出:D:/MyCode/log/log4j2-java/target/classes/com/gzl/cn/
    System.out.println(path1);

    // 获取类加载指定文件或者文件夹路径
    String path2 = this.getClass().getResource("/data/DataConvert.dll").getPath().substring(1);
    System.out.println(path2);

    //获取所有的类路径 包括jar包的路径
    System.out.println(System.getProperty("java.class.path"));
}

这个是我的项目路径。
在这里插入图片描述
注意

resources不管是在maven项目还是springboot项目我们都会将它当做资源路径,实际上就是编译后的根路径,他跟java文件夹是同等级别的。

这个是项目编译后的类根路径,从这里可以看出,我这里用的是ide编译器,eclipse也是一样的,实际上在编译器当中,java和resources都是编译后的根路径。
在这里插入图片描述
将打包的jar反编译看一下结构:

从这里可以得出结论,其实在编译器当中java和resources文件夹,我们可以理解为虚拟文件夹,实际上打出来的包是不存在这两个文件夹的,他就是代表着项目的根路径。
在这里插入图片描述

可能创建普通java项目可能会没有这个资源路径,我们可以在ide当中设置的。通过以下方式就可以将指定文件夹设置为java编译后的根路径。
在这里插入图片描述
在这里需要注意一点:我们这个路径是获取编译后的路径,也就是项目打包发布到服务器也能正常获取的,假如你新添加了一个文件,然后想要通过以下方式获取路径,可能会获取不到,因为你需要编译一下,也就是maven clean install一下就可以了。

// 获取类加载指定文件或者文件夹路径
String path2 = this.getClass().getResource("/data/DataConvert.dll").getPath().substring(1);
System.out.println(path2);
Java 项目获取当前项目的工作目录或 classpath 路径,可以通过不同的方式实现,具体取决于运行环境和需求。 ### 获取当前项目的工作目录 Java 提供了系统属性来获取当前工作目录,即运行时项目所在的目录。这个目录通常是启动 JVM 时所在的目录。 ```java String projectPath = System.getProperty("user.dir"); System.out.println("当前项目的工作目录:" + projectPath); ``` 该方法适用于大多数标准 Java 应用程序,例如通过命令行或者 IDE(如 Eclipse、IntelliJ IDEA)启动的项目[^3]。 ### 获取 classpath 路径 #### 1. 使用 `ClassLoader` 获取 classpath 根路径 ```java String classpath = ClassLoader.getSystemResource("").getPath(); System.out.println("Classpath 路径:" + classpath); ``` 此方法返回的是 classpath 的根目录路径。在大多数情况下,它指向 `classes` 目录(如果是 Maven 或 Gradle 项目,通常在 `target/classes` 中)[^4]。 #### 2. 使用当前类的 `getResource` 方法 ```java String classpath = MyClass.class.getResource("/").getPath(); System.out.println("Classpath 路径:" + classpath); ``` 这里的 `MyClass` 是当前类的名称。`getResource("/")` 返回的是 classpath 的根路径。如果去掉斜杠,则返回当前类所在包的路径。 #### 3. 在 Web 项目获取 classpath 如果是在 Spring 等框架中使用,可以通过 `ClassPathXmlApplicationContext` 获取 classpath 路径: ```java ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(); String classpath = context.getResource("").getFile().getAbsolutePath(); System.out.println("Classpath 路径:" + classpath); ``` 此方法适用于典型的 Spring Web 项目结构,能够获取 classpath 的绝对路径[^4]。 ### 注意事项 - **开发环境与运行环境差异**:在 IDE 中运行时,classpath 通常指向项目的 `src/main/resources` 或 `target/classes`;而在打包成 JAR 文件后,classpath 会指向 JAR 包内部的根路径。 - **路径编码问题**:如果路径中包含空格或特殊字符,可能需要使用 `URLDecoder.decode(path, "UTF-8")` 进行解码。 - **资源文件定位**:当需要读取配置文件时,建议使用 `ClassLoader.getResourceAsStream()` 或 `Class.getResourceAsStream()` 方法,这样可以避免直接处理路径字符串。 ### 示例代码 ```java public class PathExample { public static void main(String[] args) { // 获取当前项目工作目录 String projectPath = System.getProperty("user.dir"); System.out.println("当前项目的工作目录:" + projectPath); // 获取 classpath 根路径 String classpath1 = ClassLoader.getSystemResource("").getPath(); System.out.println("Classpath 路径(ClassLoader):" + classpath1); // 获取 classpath 根路径(通过当前类) String classpath2 = PathExample.class.getResource("/").getPath(); System.out.println("Classpath 路径(当前类):" + classpath2); } } ``` ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪 咖@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值