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文件時指定配置文件目錄

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM