2016-04-24 32 views
0

如何以文件形式檢索/ res/raw文件夾中的所有文件? 我發現this解決方案,我已經與「RES /生」所取代,你可以在下面的代碼中看到「新建文件夾」值:android - 從/ res/raw文件夾中檢索所有文件文件類型

public File[] getRawFiles() { 
     File sdCardRoot = Environment.getExternalStorageDirectory(); 
     File yourDir = new File(sdCardRoot, "res/raw"); 
     return yourDir.listFiles(); 
} 

當節目開始時,我得到一個異常上線return yourDir.listFiles

Caused by: java.lang.NullPointerException: Attempt to get length of null array 

我該如何解決這個問題,以及「res/raw /」的正確路徑是什麼?

回答

2

如何檢索/ res/raw文件夾中的所有文件作爲文件?

你不能這樣做。由於we discussed yesterday,資源不是設備文件系統上的文件。它們是開發機器上的文件。它們只是設備上APK文件的條目。

或者:

  • 做你正在嘗試做的,不涉及文件的一些其他的方式,或

  • 一個Resources對象使用openInputStream()(你可以得到一個從通過任何ContextgetResources()),並使用Java I/O將資源的內容複製到本地文件,如internal storageusing reflection to iterate over the actual resources

  • 切換到使用assets/而不是res/raw/,作爲AssetManager讓你list()資產(雖然你仍然只獲得資產的InputStream,像資源,資產無法在設備上的文件)

+0

好了,那是如何。然而,下面的問題可能是無關緊要的,但是主要的問題或者我試圖實現的是,我需要爲新的MediaMetadataRetriever()。setDataSource()設置路徑,以便收集一些關於那個mp3文件。如何獲得該路徑並將該值設置爲'setDataSource(path)'? – Kapparino

+0

@Kapparino:在['MediaMetadataRetriever'](http://developer.android.com/reference/android/media/MediaMetadataRetriever.html)上有'setDataSource()'的六個版本,並且有不同的參數。如果沒有別的辦法,可以使用一個採用'MediaDataSource'的方法,然後實現一個包裝您所需資源或資產的'MediaDataSource'。此外,對於返回「AssetFileDescriptor」的'Resources'或'AssetManager'上的任何方法,您都可以調用'getFileDescriptor()'來獲得一個'FileDescriptor'來傳入'setDataSource()'。 – CommonsWare

+0

非常感謝! – Kapparino

相關問題