簡體   English   中英

如何從依賴的jar訪問資源文件?

[英]how do I access a resource file from a dependent jar?

我有一個Android應用程序,該應用程序具有我創建的一個依賴庫,通過編譯{artifact_name}在build.gradle中對其進行了引用。 庫需要在其資源目錄(src / main / resources)中訪問資源文件。 這是我要完成的工作,但不能完成:

URL url = helper.class.getClassLoader().getResource("myfile.json");
FileReader fr = new FileReader(url.getPath());

myfile.json在我庫的src / main / java / resources中。 嘗試創建FileReader時,導致找不到應用程序崩潰,提示“ jar:file:/data/app/com.my.app/base.apk!/myfile.json”。

但是,如果我在庫本身的客戶端類中運行它,則可以找到它。

更新(我還有更多時間給出完整答案)

在您的情況下,輔助類的ClassLoader可以訪問您的文件(這就是為什么在FileReader實例中獲得"jar:file:/data/app/com.my.app/base.apk!/myfile.json" )。

但是FileReader不能理解標准URL (僅包含具有方案file: URL或沒有任何方案,但是您具有外部方案jar: -可從jar文件訪問的文件)。

在這種情況下,要讀取數據,應使用InputStreamReaderClass.getResourceAsStream組合:

ClassLoader cl = helper.class.getClassLoader();
InputStream is = cl.getResourceAsStream("myfile.json");
Reader r = new InputStreamReader(is);

PS 在通常情況下,您不需要直接訪問ClassLoader Class將自行訪問它。 只有極少數情況下應該使用對ClassLoader訪問權限,在這種情況下,您應該真正理解Class es和ClassLoader 我發現了一些有用的信息: Class es方法( getResourcegetResourceAsStream )僅在同一包中檢查文件,而ClassLoader的方法(另外)在根路徑中檢查文件(因為我記得其中一些在兩個地方都進行了檢查,今天我檢查了該類不要檢查jar文件的根目錄)。

暫無
暫無

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

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