IDEA中读取 resource目录下文件
1. 资源文件
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. 加载的文件位置
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文件时指定配置文件目录
如果文章对您有所帮助,可以点一下推荐