2016-08-16 79 views
0

我正在爲Java和Android構建一個框架。我想添加的一個功能需要從項目本身加載屬性文件。Android和Java:跨平臺屬性加載

在Android中,我可以這樣來做:

AssetManager assetManager = MyApp.getContext().getAssets(); 
InputStream inputStream = assetManager.open("path to properties"); 
properties.load(inputStream); 

,並在Java中我可以這樣做:

InputStream fis = getClass().getResource("path to properties").openStream(); 
properties.load(fis); 

有沒有什麼辦法可以讓屬性加載跨平臺(可能保持Android標準結構)?我在Google上沒有發現任何內容。

這個問題主要是與android相關的,因爲我認爲我應該能夠使用Java方法,假設屬性位於類路徑中。

謝謝。

+0

根據Android SDK級別打開另一個'InputStream',如果它大於1 - 從上下文查詢資產,否則回退到Java解決方案。 – Shark

+0

謝謝你的回答。然而,使用你的解決方案,我仍然會有Android上下文的依賴關係,如果我使用框架只能使用Java,我該如何解決它們? – Aurasphere

回答

1

從類路徑獲取資源(例如,執行getClass()。getResource())並從文件系統獲取資源(使用Android資產)基本上是不同的。儘管使用標準Java,我認爲你不會快速遇到麻煩(如果你的框架將用於OSGi容器中,它具有不同的類路徑規則,你會這樣做)。

因此,我想知道爲什麼Android引用的文件在文件系統上(資產中),而對於Java他們在類路徑上?

我認爲最好把這些文件放在Android的類路徑中?如果這是不可能的,也許可以使用基於文件的方法,並在某處配置基礎文件夾?

+0

你的答案真的很有趣...我認爲資產文件夾本身在Android類路徑下,因爲路徑是src/main/assets,我使用該文件夾,因爲它似乎是根據文檔的標準:https:/ /developer.android.com/studio/projects/index.html?hl=ko – Aurasphere

+0

是的,它與res/raw一起 - 將原始文件添加到Android應用的標準位置。但是,它們都不是將文件放在類路徑中的一種方式。通常,原始文件不會放在類路徑中,除非它們是配置文件或其他東西。 –

+0

我明白了。我習慣於將資源放在src/main/resources下的Maven,它會自動將該文件夾添加到類路徑中。我認爲Gradle對src下的所有文件夾都做了相同的處理,但我想我錯了。我大概可以編寫一個構建腳本來完成這個任務,但我認爲這對框架來說用處不大,所以我可能會用兩個不同的版本,一個用於Java,一個用於android。謝謝。 – Aurasphere