Hello World

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文件时指定配置文件目录

 

posted @ 2018-12-14 15:28  小小忧愁米粒大  阅读(14258)  评论(0编辑  收藏  举报
瞅啥瞅,好好看书