java中的相对路径用法

一、不借助类的直接相对路径(一般不用)

下面两行的效果一样

image-20210917221912780

上面一行就是相对于当前工程目录(此种方法一般不用,因为,发布的时候src目录就不存在了)

下面一行是绝对路径

二、借助类的获取相对路径(看编译后的文件路径)

*此时,不可以采用上面的src/*路径,因为编译后src目录不存在

使用斜杠表示项目的根目录

下面出现了两种使用方法:

  1. 一种是使用“/”推荐使用这种
  2. 另一种是使用“./”,这种方法不推荐,(因为有时候这种方法会不允许)

下面两张图分别是允许使用“./”,和不允许使用”./“的情况,但是都允许使用”/“

image-20210917220901850

image-20210917221601506

三、小结

上述两种使用方法基本上可以满足平常使用需要

留有问题

但是,还会有一些其他情况,由于没有摸索清楚,所以没有写上去。比如有时候,第二种方法中的”/”也可以直接去掉,有时候却不行;有时候第二种方法中的“./”可以使用,“../”也可以使用,但有时候却不行。

若有高手,敬请指教,等待帮忙更新Thanks♪(・ω・)ノ

img




补充

几周过去了,又遇到了相对路径的问题,回头重新看了博客,感觉之前的理解还不够好,又重新整理了一下。

首先,将路径问题重新进行分类:①相对的是计算机的盘符根目录(如“D:”)②相对当前项目的根目录③相对classpath路径④Properties获取资源文件⑤绝对路径

实验环境

image-20211123124724761

相对的是计算机的盘符根目录(如“D:”)

1
2
3
4
File file2 = new File("/text");
System.out.println(file2.getAbsolutePath());
File file4 = new File("/");
System.out.println(file4.getAbsolutePath());

image-20211123125347487

上述代码读取的就是从D盘,可见“/”和“/内容“代表的是盘符根目录

相对当前项目的根目录

1
2
3
4
5
6
File file1 = new File("./text");
System.out.println(file1.getAbsolutePath());
File file4 = new File(".");
System.out.println(file4.getAbsolutePath());
File file5 = new File("");
System.out.println(file5.getAbsolutePath());

image-20211123125328298

上述代码读取的位置是相对项目的根目录位置

相对classpath路径

什么是classpath路径?

什么是classpath路径?或者说classpath路径指向的是哪里呢?

回答:最终下图中的src源文件夹、resource资源文件夹****中的内容都会被打包到输出文件夹tearget/classes文件夹下(java和resource就不在了)**

image-20211123124938384

有哪些获取classpath路径的方法呢?

1
2
3
4
5
6
System.out.println(file3.getAbsolutePath()); 	// 在下面截图中,未展示该结果
System.out.println(Test2.class.getResource("")); // 在下面截图中,从该条命令开始打印
System.out.println(Test2.class.getResource("/"));
System.out.println(Test2.class.getClassLoader().getResource(""));
System.out.println(ClassLoader.getSystemResource(""));
System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));

image-20211123125500979

使用Properties获取资源文件

使用下面代码可以获取到resource资源文件下的资源文件

1
2
Properties properties = new Properties();
properties.getProperty("a");

绝对路径

绝对路径就一句话:从盘赋开始的URL路径

第二次小结

经过两次的大学习、大整理,关于java的相对路径总的来说就三个方面(或者说是三个类型):

  • 相对jdk所在盘符根目录

  • 相对项目所在的根目录

  • 相对classpath所在的路径(需要理解classpath路径指向的是哪里)

  • 附加一个Properties获取资源文件的类

Contents
  1. 1. 一、不借助类的直接相对路径(一般不用)
  2. 2. 二、借助类的获取相对路径(看编译后的文件路径)
  3. 3. 三、小结
    1. 3.1. 留有问题
    2. 3.2. 若有高手,敬请指教,等待帮忙更新Thanks♪(・ω・)ノ
  4. 4. 补充
    1. 4.1. 实验环境
    2. 4.2. 相对的是计算机的盘符根目录(如“D:”)
    3. 4.3. 相对当前项目的根目录
    4. 4.4. 相对classpath路径
      1. 4.4.1. 什么是classpath路径?
      2. 4.4.2. 有哪些获取classpath路径的方法呢?
    5. 4.5. 使用Properties获取资源文件
    6. 4.6. 绝对路径
  5. 5. 第二次小结
|