Java关于相对路径和绝对路径

绝对路径

绝对路径就是文件的真正存在的路径,是指从硬盘的根目录(盘符)开始,进行一级级目录指向文件。

/开头的就是绝对路径(win&Linux),Windows中也可以直接以为盘符去声明绝对路径

例如我写了/src/main/... 第一个反斜杠在windows中就代表你所在的盘符的标识,比如D://src/main/...

相对路径

当前工作目录是指当前文件所在的目录

相对路径就是依赖于当前工作目录的。

所谓相对路径,就是相对于自己的目标文件位置。
./ 代表的是当前目录,也可以省略直接写文件名或者目录名。
../ 代表的是上一级目录,也就是父级目录。
../../ 代表源文件所在目录的上上级目录,依次类推

Java中使用

java 复制代码
    public static void main(String[] args) throws Exception{
    	// 这个属性表示的是当前 Java 应用程序的启动目录(也称为工作目录或用户目录),并且这个路径是相对于文件系统的根目录的完整路径
        System.out.println("System.getProperty(\"user.dir\") = " + System.getProperty("user.dir"));

		// 直接写目录,前面不带任何斜杠
        File file1 = new File("src/main/resources/config/config.ini");
        System.out.println("file1 = " + file1.getAbsolutePath());
        // 使用 ./ 开始写目录
        File file2 = new File("./src/main/resources/config/config.ini");
        System.out.println("file2 = " + file2.getAbsolutePath());
        // 使用 / 开始目录
        File file3 = new File("/src/main/resources/config/config.ini");
        System.out.println("file3 = " + file3.getAbsolutePath());
    }

打印结果

xml 复制代码
System.getProperty("user.dir") = D:\Data\IdeaWorkSpace\aliyun_oss_study
file1 = D:\Data\IdeaWorkSpace\aliyun_oss_study\src\main\resources\config\config.ini
file2 = D:\Data\IdeaWorkSpace\aliyun_oss_study\.\src\main\resources\config\config.ini
file3 = D:\src\main\resources\config\config.ini

总结

1.可以看到Java中强烈不建议使用./开头,IDE运行的结果不太对,但是./确实是当前目录。
2.如果你想以相对路径的形式访问文件,不需要添加斜杠即可(就像file1),那么当前路径其实是System.getProperty("user.dir")输出的路径
3.从file3可以看到,以斜杠/开头完全就是以当前根目录开头的,在win系统下就是以你所在的盘符开头的,在输出结果中看到我的是D盘

最后建议在项目中以上形式都不要使用,如果要访问文件最好以类路径的方式去访问项目资源,这样可以最大程度保证源代码和服务器上跑的服务都可以访问到文件

java 复制代码
		// 最推荐  类加载的形式读取数据  不用在意源代码和编译后的文件的位置
        InputStream resourceAsStream = CommonUtil
        	.class
        	.getClassLoader()
        	.getResourceAsStream("config/config.ini");

一般源代码和编译后的jar包中的资源位置都不一样的,这样获取类路径的方式可以保证不出错,下图可以看到实际都是从类路径中拿到的

相关推荐
骄马之死2 小时前
SpringMVC + SpringBoot 核心知识点总结
java·spring boot·后端
z落落2 小时前
C# 泛型方法(原理、类型推断、多泛型参数)+泛型效率(普通类型 VS Object装箱 VS 泛型)
开发语言·c#
L_09072 小时前
【C++】异常
开发语言·c++
世辰辰辰3 小时前
批量修改图片/文本名子
开发语言·python·批量修改文件名
郑洁文3 小时前
基于Spring Boot的流浪动物救助网站
java·spring boot·后端·毕设·流浪动物救助
螺丝钉code4 小时前
JAVA项目 Claude code CLAUDE.md 到底应该怎么写
java·人工智能·claude code
z落落5 小时前
C# 四种特殊类:抽象类、密封类、静态类、部分类
开发语言·c#
摇滚侠5 小时前
Maven 入门+高深 单一架构案例 54-59
java·架构·maven·intellij-idea
VidDown6 小时前
Webhook 调试器:让第三方回调“原形毕露”
java·开发语言·javascript·编辑器·postman
折哥的程序人生 · 物流技术专研6 小时前
Java 23 种设计模式:从踩坑到精通 | 原型模式 —— 克隆对象,深拷贝与浅拷贝的坑你踩过吗?
java·设计模式·架构·原型模式·单一职责原则