文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

前言:

在纯 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.getClassLoader().getResource()的路径 然后让 getClassLoader 处理。

3.2ClassLoader

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

获取 classLoader 的方法:

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.properties
file:/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/production/pathdemo/src.properties
System.out.println(fileURL.getPath());


// 这两种方法都是可以的 
File file = new File(fileURL.toURI());
Filw file2 = new File(fileURL.getPath())

到此这篇关于Java项目中获取路径的绝对路径问题和相对路径问题的文章就介绍到这了,更多相关Java项目中获取文件地址内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯