1. 资源文件
2. 加载文件
public voidtest() {try{
System.out.println("begin test");
String filepath= "log4j2.yml";//此处取项目路径 + 传入的路径,改路径获取不到文件//如果要获取文件需要传入 src/main/resources/log4j2.xml
File temp = newFile(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= newFile(uri);
System.out.println(uriFile.getAbsolutePath());
}catch(URISyntaxException e) {
System.err.println(e);
}
}
3. 加载的文件位置
4. Linux下的异常问题
读取jar包中的文件的情况下
4.1 getResource
URL url = LoadCacheFile.class.getClassLoader().getResource(filepath)..getFile();
Linux下的输出:
文件路径中多了两个 ! ,导致找不到文件而报错;有时URL中还可能出现多了一个空格的问题;
4.2 URI
URI resource = LoadCacheFile.class.getClassLoader().getResource(filepath).toURI();
log.info("{}",new File(resource).getAbsolutePath());
异常现象:
5. 正确的使用方式
5.1 getResourceAsStream
LoadCacheFile.class.getClassLoader().getResourceAsStream(filepath) 这种方式在Windows和Linux下都没有问题,建议使用此种方式
5.2 配置文件尽量不要放在jar包中,最好在jar包外单独的放在一个文件夹,也便于后期配置文件的修改。
出门左拐:启动jar文件时指定配置文件目录