簡體   English   中英

Class.getResourceAsStream()問題

[英]Class.getResourceAsStream() issue

我有一個帶有java類的JAR-archive。 其中一個使用嵌入到同一JAR中的一些資源。 為了加載我使用的資源

MyClass.class.getResourceAsStream(myResourceName);

但困擾我的一件事是,是否保證從同一個JAR中加載所需的資源。 “getResourceAsStream()”方法(以及相應的ClassLoader方法)的文檔對我來說並不是很清楚。

如果在我的JAR之前有一個具有相同名稱的資源位於JVM類路徑中的某個位置,會發生什么? 是否會加載該資源而不是我的JAR中嵌入的資源? 有沒有其他方法來替換JAR中嵌入的資源?

是。 返回類路徑上找到的第一個匹配資源,就像可執行搜索路徑一樣。 這就是為什么資源通常通過將它們放在鏡像庫或應用程序的包結構的目錄中來“命名空間”的原因。

在存在自定義類加載器(例如在OSGi中)時,此行為可能略有不同,但對於vanilla Java應用程序,情況就是這樣。

它的工作方式與查找類文件的方式大致相同。 所以首先嘗試父類加載器(遞歸),然后執行類加載器實現所做的任何事情來查找文件。

沒有檢查直接調用者類加載器(如ResourceBundle所做的那樣 - 參見Java安全編碼指南的第6.3節)。 但是,您確實需要打開URL權限,因為ClassLoader.getResourceAsStream只是在默認實現中調用URL.openStream

指定包。 假設你使用com.yourcompany.file它應該是唯一的。 (除非有人想通過類路徑覆蓋你的配置文件。)

如果只想從特定的JAR讀取文件,可以打開JarFile並直接讀取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM