2011-08-23 189 views
1

我有一個用核心jdk編譯的jar。Android - 從外部jar讀取txt文件

它包含一個讀取txt文件的java類。 它有一個測試,證明這個類可以正常工作。

如果我將這個jar包含在我的android項目中,然後調用讀取txt文件的java類。它無法報告:java.io.FileNotFoundException並向我想要加載的txt文件的路徑添加'/'。

Android的安全模型是否阻止讀取txt文件?

我的項目結構:

的Android模塊:

SRC/Loader.java [調用GetName.java]

的Java模塊:

test/TestGetName.java [調用GetNam e.java]

的src/GetName.java

資源/ names.txt中

摘要:

TestGetName.java工作

Loader.java失敗。一個FileNotFoundException拋出GetName

回答

1

最終得出結論。我需要一個條件來查看我是在本地加載文件還是作爲資源加載。在不使用條件的情況下,可能需要一個更好的方法。

String source = "resources/inputfile.txt"; 
    BufferedReader fin; 

    InputStream inputStream = getClass().getResourceAsStream(source.substring(source.lastIndexOf("/"))); 
    if (inputStream != null) { 
     fin = new BufferedReader(new InputStreamReader(inputStream)); 
    } else { 
     fin = new BufferedReader(new FileReader(new File(source))); 
    } 

感謝關於閱讀作爲一種資源user77777777

1

它似乎不像Android停止訪問該文件,因爲例外是FileNotFoundException。你應該檢查詳細的信息來確認。捕捉異常並打印詳細的消息。這會給你一個更好的主意。還要重新檢查文件路徑。編輯: 嘗試僅傳遞資源名稱。

getClassLoader().getResource("names.txt"); 
+0

詳細消息狀態: /resources/names.txt(沒有這樣的文件或目錄) 但這不是我提供的路徑。我提供:resources/names.txt –

+0

其中是資源文件夾?在哪個目錄中?它假定資源文件夾位於根目錄中。 – Ronnie

+0

資源文件夾位於模塊的根目錄中。我不知道爲什麼它試圖加載它從文件系統根 –

0

我不知道爲什麼,但接受的答案,我沒有工作的提示。

構建系統:搖籃

工作環境:Android Studio中

我還包括來自外部JAR資源。但爲了使用它們,我還必須包含完整路徑。

this.getClass().getResourceAsStream("/template/login.xml") 

希望這可以幫助某人,並阻止他花費3個小時將他的頭靠在牆上找到答案。