Java项目中获取路径的绝对路径问题和相对路径问题

网友投稿 544 2022-08-26


Java项目中获取路径的绝对路径问题和相对路径问题

目录1.目录结构2.class.getResource(Stringname)3.class.getClassLoader().getResource(Stringname)3.1区别3.2ClassLoader3.3关于URL的一些知识

前言:

在纯 java 代码里 我们一般都会用​​class.getResource(String name)​​​ 或者 ​​class.getClassLoader().getResource(String name)​​ 两种方法获取文件的地址 (当然不止这两种方法)。今天就说说这两种方法的异同。这里说的纯 Java 代码不是 Java web 项目。

1.目录结构

2.class.getResource(String name)

输入:可以接受相对路径(相对于该 class 类)或者绝对路径(根目录符号为 / 代表项目的根目录 不代表硬盘的根目录)

返回:URL 对象 该对象表示指向 name 的资源

// 获取相对路径 此时获取的是该class文件的同级目录

System.out.println("相对路径:同级目录下的配置文件>"+Main.class.getResource("demo.properties"));

// 获取的绝对路径 相对于跟目录来说的

System.out.println("绝对路径:同级目录下的配置文件>"+Main.class.getResource("/com/xing/demo/demo.properties"));

System.out.println("相对路径:上一级目录下的配置文件>"+Main.class.getResource("../xing.properties"));

System.out.println("绝对路径:根目录下的配置文件>"+Main.class.getResource("/src.properties"));

// 当传入的是绝对路径(带有‘/')的时候,getresource()方法会从项目的根目录开始解析路径地址

输出:

相对路径:同级目录下的配置文件>file:/E:/ideawork/pathdemo/out/production/pathdemo/com/xing/demo/demo.properties绝对路径:同级目录下的配置文件>file:/E:/ideawork/pathdemo/out/production/pathdemo/com/xing/demo/demo.properties相对路径:上一级目录下的配置文件>file:/E:/ideawork/pathdemo/out/production/pathdemo/com/xing/xing.properties绝对路径:根目录下的配置文件>file:/E:/ideawork/pathdemo/out/production/pathdemo/src.properties

3.class.getClassLoader().getResource(String name)

输入:只能接受相对路径 但此相对路径是相对于根目录来说的

返回:URL 对象

// src 在根目录下 这里的同级也就是根目录了

System.out.println("相对路径:同级目录下的配置文件>"+Main.class.getClassLoader().getResource("src.properties"));

System.out.println("相对路径:相对根目录的下一级目录下的配置文件>"+Main.class.getClassLoader().getResource("com/com.properties"));

System.out.println("相对路径:相对根目录的下下一级目录下的配置文件>"+Main.class.getClassLoader().getResource("com/xing/xing.properties"));

输出:

相对路径:同级目录下的配置文件>file:/E:/ideawork/pathdemo/out/production/pathdemo/src.properties相对路径:相对根目录的下一级目录下的配置文件>file:/E:/ideawork/pathdemo/out/production/pathdemo/com/com.properties相对路径:相对根目录的下下一级目录下的配置文件>file:/E:/ideawork/pathdemo/out/production/pathdemo/com/xing/xing.properties

注意:

/**

* 下面两种有相同的作用

*/

System.out.println("==相对路径:同级目录下的配置文件>"+Main.class.getResource("demo.properties"));

System.out.println("==相对路径:相对根目录的下下一级目录下的配置文件>"+Main.class.getClassLoader().getResource("com/xing/demo/demo.properties"));

输出:

==相对路径:同级目录下的配置文件>file:/E:/ideawork/pathdemo/out/production/pathdemo/com/xing/demo/demo.properties==相对路径:相对根目录的下下一级目录下的配置文件>file:/E:/ideawork/pathdemo/out/production/pathdemo/com/xing/demo/demo.properties

3.1区别

两者的区别:

其实我们看源码就知道class.getResource 其实就是用的 class.getClassLoader().getResource(String name)。

只不过是class.getResource 会通过 resolveName 这个方法把传入的路径都转换为符合 class.getClassLoadFiAdRxver().getResource()的路径 然后让 getClassLoader 处理。

3.2ClassLoader

class.getClassLoader().getResource(String name) 使用的是 ClassLoader,而 ClassLoader 的获取是有很多方法的。

获取 classLoader 的方法:

Thread.currentThread().getContextClassLoader()ClassLoader.getSystemClassLoader().class.getClassLoader()

System.out.println(Thread.currentThread().getContextClassLoader().getResource("src.properties"));

System.out.println(ClassLoader.getSystemClassLoader().getResource("src.properties"));

输出:

file:/E:/ideawork/pathdemo/out/production/pathdemo/src.propertiesfile:/E:/ideawork/pathdemo/out/production/pathdemo/src.properties

扩展一下: 获取项目的硬盘目录 直到项目名级别的目录

// 输出:E:\sparkwork\pathdemo

System.out.println(System.getProperty("user.dir"));

3.3关于 URL 的一些知识

URL fileURL = Main.class.getResource("/src.properties");

// 输出:file:/E:/sparkwork/pathdemo/out/production/pathdemo/src.properties

System.out.println(fileURL.toURI());

// 输出:/E:/sparkwork/pathdemo/out/productioFiAdRxvn/pathdemo/src.properties

System.out.println(fileURL.getPath());

// 这两种方法都是可以的

File file = new File(fileURL.toURI());

Filw file2 = new File(fileURL.getPath())


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python 可变参数 *args **kwargs 的再了解(python编程)
下一篇:Python import导入模块 - reload() 导入的内容
相关文章

 发表评论

暂时没有评论,来抢沙发吧~