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