IDEA中读取 resource目录下文件

时间:2023-03-09 05:51:30
IDEA中读取 resource目录下文件

1. 资源文件

IDEA中读取 resource目录下文件

2. 加载文件

    public  void test() {

        try {
System.out.println("begin test");
String filepath = "log4j2.yml";
// 此处取项目路径 + 传入的路径,改路径获取不到文件
// 如果要获取文件需要传入 src/main/resources/log4j2.xml
File temp = new File(filepath);
System.out.println(temp.getAbsolutePath());
//下面四种情况取编译后target\classes 目录下的文件
// File 形式
File file = new File(BootApplication.class.getClassLoader().getResource(filepath).getFile());
System.out.println(file.getAbsolutePath());
// InputStream 形式
InputStream inputStream = BootApplication.class.getClassLoader().getResourceAsStream(filepath);
System.out.println(inputStream);
// URL 形式
URL url = BootApplication.class.getClassLoader().getResource(filepath);
System.out.println(url);
// URI 形式
URI uri = BootApplication.class.getClassLoader().getResource(filepath).toURI();
File uriFile = new File(uri);
System.out.println(uriFile.getAbsolutePath());
} catch (URISyntaxException e) {
System.err.println(e);
}
}

3. 加载的文件位置

IDEA中读取 resource目录下文件

4. Linux下的异常问题

  读取jar包中的文件的情况下

4.1 getResource

  URL url = LoadCacheFile.class.getClassLoader().getResource(filepath)..getFile();

  Linux下的输出:

  IDEA中读取 resource目录下文件

  文件路径中多了两个 ! ,导致找不到文件而报错;有时URL中还可能出现多了一个空格的问题;

4.2 URI

                URI resource = LoadCacheFile.class.getClassLoader().getResource(filepath).toURI();
log.info("{}",new File(resource).getAbsolutePath());

异常现象:

  IDEA中读取 resource目录下文件

5. 正确的使用方式

5.1  getResourceAsStream

  LoadCacheFile.class.getClassLoader().getResourceAsStream(filepath) 这种方式在Windows和Linux下都没有问题,建议使用此种方式

5.2 配置文件尽量不要放在jar包中,最好在jar包外单独的放在一个文件夹,也便于后期配置文件的修改。

  出门左拐:启动jar文件时指定配置文件目录