java中資源的定位
阿新 • • 發佈:2020-11-28
java中的資源
作業系統中的檔案一般都叫做資源,例如圖片、文字檔案、視訊、音訊等等。在java平臺中獲取這些檔案或者定位這些檔案可以通過java語言本身的一些API,例如File、InputStream、OutputStream等等。
在java平臺中如果直接通過檔案系統API來定位檔案會比較不靈活,為了方便起見java平臺可以結合作業系統的環境變數以及jvm引數來設定一些特定的資源位置,利用這些引數,再對檔案系統的API進行封裝,為使用者提供一些更為簡單方便的資源定位的API 。例如Class物件中的getResource()方法或者類載入器中的getResource()方法。
在資源定位時,還可以使用java中的URL類,這個類不僅僅可以定位本地檔案系統中的資源,還可以定位網路中的資源。根據不同資源定位處理器,可以根據不同的協議處理不同的資源。
一般支援的協議有 file: http:/https: jar: 等協議。
獲取資源位置
public static void showURL() throws IOException { /** * Class類的getResource() * 第一種:獲取類載入的根路徑 D:\workspace\algorithm-pro\target\classes */ File f = new File(URLReadJar.class.getResource("/").getPath()); System.out.println(f);/** * Class類的getResource() * 獲取當前類的所在工程路徑; 如果不加“/” 獲取當前類的載入目錄 D:\workspace\algorithm-pro\target\classes\com\resource\location */ File f2 = new File(URLReadJar.class.getResource("").getPath()); System.out.println(f2); /** * 第二種:獲取專案路徑 D:\workspace\algorithm-pro * 也可以採用System中的getPropertry("user.dir")獲取專案路徑*/ File directory = new File("");// 引數為空 String courseFile = directory.getCanonicalPath(); System.out.println(courseFile); /** * 類載入器的的getResource() * 第三種: file:/D:/workspace/algorithm-pro/target/classes/ * 注意此處用的是 類載入器 的getResource(),獲取的是當前類載入器的工作目錄 * URLReadJar的類載入器,其實就是應用程式類載入器,也叫系統類載入器。 */ URL xmlpath = URLReadJar.class.getClassLoader().getResource(""); System.out.println(xmlpath); /** * 結果:D:\workspace\algorithm-pro * 獲取當前工程路徑 */ System.out.println(System.getProperty("user.dir")); /** * 獲取所有的類路徑 包括jar包的路徑 D:\workspace\algorithm-pro\target\classes */ System.out.println(System.getProperty("java.class.path")); }
配置檔案中的classpath與classpath*的區別
無論是maven專案還是普通的java工程都會有個src目錄,這個目錄中存放著專案的java檔案和配置檔案。web專案src目錄下的檔案在編譯後會放到WEB-INF/classes,非web專案src目錄下的檔案在編譯後會放到classes/。
classpath所對應的路徑指的就是WEB-INF/classes(或者classes/)
。
classpath 和 classpath* 區別: classpath:只會到你的class路徑中查詢找檔案; classpath*:不僅包含class路徑,還包括jar檔案中(class路徑)進行查詢. 用classpath*:需要遍歷所有的classpath,所以載入速度是很慢的,因此,在規劃的時候,應該儘可能規劃好資原始檔所在的路徑,儘量避免使用 classpath*
參考: https://www.jianshu.com/p/0dd322e51516