2013-03-16 67 views
0

我嘗試在android中加載.ini文件,但它不起作用。到現在爲止我曾嘗試以下兩種方法:從RES /原始文件夾Android:res /原始文件和資產都不能加載

加載文件:

int fileId = context.getResources().getIdentifier(fileName, "raw", context.getPackageName()); 
bufferedReader = new BufferedReader(new InputStreamReader(Resources.getSystem().openRawResource(fileId))); 

// I tried this too: 
//context.getResources().openRawResource(fileId))); 

我首先想到的是,上下文可能是問題,但則getIdentifier()方法返回正確的R.原始ID,並在openRawResource()的logcat的始終會顯示此:

03-17 00:17:41.627: W/ResourceType(28752): No known package when getting value for resource number 0x7f040000 
03-17 00:17:41.627: W/System.err(28752): android.content.res.Resources$NotFoundException: Resource ID #0x7f040000 

當我嘗試加載從/資產目錄中的文件:

AssetManager assetManager = context.getAssets(); 
bufferedReader = new BufferedReader(new InputStreamReader(assetManager.open(fileName))); 

...我總是得到FileNotFoundException異常:

03-17 00:33:32.006: W/System.err(30447): java.io.FileNotFoundException: /file.ini: open failed: ENOENT (No such file or directory) 

我希望有人能幫助我解決這個問題,我只是不知道去哪裏找。我也在網上搜索並發現了類似的問題,但沒有解決方案。

回答

0

好吧,現在我發現了錯誤。 我上面發佈的代碼正在工作,但之後立即我的程序調用了一個引發FileNotFoundException的方法(它不應該這樣做)。正因爲如此,我總是看着代碼的錯誤部分。 現在我使用該方法打開/ assets目錄中的文件,它的工作原理與它應該一樣。 儘管如此,感謝您的幫助。

0

如果fileNamefile.ini,那麼您的getIdentifier()調用將失敗,因爲資源名稱不包含文件擴展名。使用file(或者,更好的是,一起擺脫getIdentifier()並使用R.raw.file)。

關於第二種方法,您的項目目錄需要爲assets/,而不是asset/

+0

getIdentifier()從R.java文件返回正確的值(我僅使用文件擴展名爲資產變體)。 – user2178205 2013-03-17 09:52:52

+0

並感謝提供/資產的提示(發佈時我輸入了錯字),但這似乎不成問題。應用程序找不到該文件,儘管它在R.java中提到。不幸的是使用R.raw.file沒有幫助。 – user2178205 2013-03-17 10:26:39

0

非常仔細地檢查你的文件名:

1)確保他們都是小寫,並在您的編碼 2條所界定)確保文件類型夜是正確的(例如,作爲.TTF原因引用的雜項文件這個問題) 3)確保你的文件路由是正確的。例如r.id.whatever

玩得開心:)

+0

文件名ist小寫,位於res/raw文件夾中。即使我跳過getIdentifier方法並使用R.raw.file,我也會像使用/ assets方法一樣獲得FileNotFoundException。 – user2178205 2013-03-17 10:19:37