前言:
在纯 Java 代码里 我们一般都会用class.getResource(String name) 或者 class.getClassLoader().getResource(String name) 两种方法获取文件的地址 (当然不止这两种方法)。今天就说说这两种方法的异同。这里说的纯 Java 代码不是 Java web 项目。
1.目录结构 2.class.getResource(String name)输入:可以接受相对路径(相对于该 class 类)或者绝对路径(根目录符号为 / 代表项目的根目录 不代表硬盘的根目录)
返回:URL 对象 该对象表示指向 name 的资源
输出:
相对路径:同级目录下的配置文件>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 对象
输出:
相对路径:同级目录下的配置文件>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
注意:
输出:
==相对路径:同级目录下的配置文件>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.getClassLoader().getResource()的路径 然后让 getClassLoader 处理。
3.2ClassLoaderclass.getClassLoader().getResource(String name) 使用的是 ClassLoader,而 ClassLoader 的获取是有很多方法的。
获取 classLoader 的方法:
Thread.currentThread().getContextClassLoader()ClassLoader.getSystemClassLoader().class.getClassLoader()输出:
file:/E:/ideawork/pathdemo/out/production/pathdemo/src.propertiesfile:/E:/ideawork/pathdemo/out/production/pathdemo/src.properties
扩展一下: 获取项目的硬盘目录 直到项目名级别的目录
3.3关于 URL 的一些知识到此这篇关于Java项目中获取路径的绝对路径问题和相对路径问题的文章就介绍到这了,更多相关Java项目中获取文件地址内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!