2014-09-23 55 views
2

我最近剛開始使用Android Studio進行編程學習。當我使用getResourceAsStream讀取Android Studio中的屬性文件時,獲取「null」

我今天遇到了一個問題,當我使用getResourceAsStream從JUNIT TEST中讀取一個屬性文件時,這個問題一直保持「null」狀態。

當我使用Eclipse時,我曾經在「src」目錄下找到.properties文件。但在Android Studio中,它不起作用。

下面是代碼名爲Bean工廠類的那部分,:

private static Properties properties; 

static { 
    properties = new Properties(); 
    InputStream is = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties"); 
    try { 
     properties.load(is); 
    }catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

在Eclipse中,我所在src下的道具文件,它工作得很好。

但在Android Studio中,我嘗試將「bean.properties」文件放在幾個不同的目錄中。比如/ src或/ src/main/java,沒有任何結果。

我應該在哪裏放置prop文件?我應該爲此做什麼配置?

回答

0

有兩個問題。一般而言,資源以編譯後的.class文件存儲在jar文件中。 getResourcegetResourceAsStream是一類的方法。在這個類的jar中搜索資源(一般來說)。所以繼承getClass().getResource("...")可能是危險的。

第二個更嚴重的錯誤是,除非使用「/ ...」,否則路徑是相對於到類的包(目錄)。

另一種方法是使用ResourceBundle而不是Properties。 ResourceBundle有一個用於* .properties的PropertiesResourceBundle。

ResourceBundle properties = ResourceBundle.getBundle("bean"); 
-1

試試這個:
1.put自己bean.properties在app文件/ src目錄/主/資產
2.change你的代碼:

private static Properties prop; 

static { 
    prop = new Properties(); 
    try { 
     InputStream is = IWorkApplication.getInstance().getResources().getAssets().open("bean.properties", Context.MODE_PRIVATE); 
     prop.load(is); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

PS。 IWorkApplication.getInstance()是在我自己的應用程序類中定義的。
希望有用

+0

這會起作用,但在大多數情況下,您並不是真的希望這些文件被包含在應用程序構建中,因爲它們是單元測試的虛擬數據。 – Oyvind 2015-02-10 23:00:44

1

將資源放入資產在某些情況下是不可接受的。我通過將所需的資源打包到特殊的jar文件中,並將此jar放入libs目錄中來解決此問題。因此,您仍然可以通過標準的Java技術訪問它們。

+0

任何想法,主要Android模塊所依賴的java庫模塊中的資源需要做什麼? – 2016-10-01 19:21:48

相關問題