java 相对路径获取 -- getResource的应用

(一)函数:
    (1)   Class.getResource(String path)           
    (2)   Class.getClassLoader.getResource(String path)

其中(2)中 path不能以‘/‘开头
(1)中path 开头有无‘/‘ 均可,含义不同

(二)测试目录结构:

|--project

    |--src

        |--mytest

            |--RePathTest.java

            |--file1.txt

        |--file2.txt

    |--bin

        |--mytest

            |--RePathTest.class

            |--file3.txt

        |--file4.txt

(三)用法:
(2)中  默认是从ClassPath (即 bin 或 classes路径)下获取
本例中:
File file3 = new File(RePathTest.class.getClassLoader().getResource("mytest/file3.txt").getFile());  
File file4 = new File(RePathTest.class.getClassLoader().getResource("file4.txt").getFile());

(1)中 
a. 以‘/‘开头,而表示从ClassPath (即 bin 或 classes路径)下获取
本例中:
File file3 = new File(RePathTest.class.getResource("/mytest/file3.txt").getFile()); // 从classpath 即 bin下找 

b. 不以‘/‘开头,表示相对于 RePathTest.class 的路径
本例中:
File file3 = new File(RePathTest.class.getResource("file3.txt").getFile());  // 从 package mytest 包  找,相对于 .class(此处为  RePathTest.class )文件

(四) getResourceAsStream()   vs  getResouce()
getResourceAsStream()方法,参数是与getResouce()方法是一样的,它相当于你用getResource()取得File文件后,
再new InputStream(file)一样的结果

(五)补充
1. web中以 WEB-INF中classes文件为classpath目录
2. getResource 获取路径与 .class文件夹有关,与 .java文件夹无关

(六)测试
package mytest;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class RePathTest {
    RePathTest Test = new RePathTest();
    public static void main(String[] argsthrows FileNotFoundException {
    File file3 = new File(RePathTest.class.getResource("file3.txt").getFile());
    //File file3 = new File(RePathTest.class.getResource("/mytest/file3.txt").getFile());
    //File file3 = new File(RePathTest.class.getClassLoader().getResource("mytest/file3.txt").getFile());
    
    FileReader fr = new FileReader(file3);
    BufferedReader br = new BufferedReader(fr);
    try {
        String line = br.readLine();
        while (line != null) {
            System.out.print(line);
            line = br.readLine();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    //File file4 = new File(RePathTest.class.getResource("/file4.txt").getFile());
    //File file4 = new File(RePathTest.class.getClassLoader().getResource("file4.txt").getFile());
    
    }
}  

参考:

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。