2013-03-29 55 views
0

getAssets()openFD()失敗。Android getAssets()。openFd(string) - 文件未找到

AssetFileDescriptor fileFD=null; 
File file = new File(Environment.getExternalStorageDirectory() + "/Music/ckyws8.wav"); 
fileFD = getAssets().openFd(file.toString()); //FAILS 

日誌顯示: java.io.FileNotFoundException:/mnt/sdcard/Music/ckyws8.wav

即使file.exists()回報true ,也是測試:

File tempath = new File(Environment.getExternalStorageDirectory() + "/Music");   
int files = tempath.list().length; 
for(int f=0;f<files;f++){ 
    Log.d(LOG_TAG,tempath.list()[f].toString());  
} 

返回包含列表ckyws8.wav

任何想法?

回答

0

AssetManager用於訪問您的應用程序的資產,這是項目源代碼樹中assets/目錄的內容。它不適用於訪問內部或外部存儲器上的文件,這就是爲什麼您的代碼無法工作。

+0

以前的答案,儘可能短,是有幫助的。如果其他人遇到同樣的誤解,那麼我就改變了代碼的工作方式。 – NMKloster

0

先前的答案,儘可能短,是有幫助的。萬一別人遇到同樣的誤解,繼承人什麼我已經改變,以使代碼工作:

首先,因爲它不是在資產AssetFileDescriptor fileFD=null;一個文件更改爲FileDescriptor fileFD=null;牢記它們有不同的功能和其他部位的代碼需要改變。

爲了得到需要一個FileDescriptor一個FileInputStream,所以代碼的另一部分內容:

File file = new File(Environment.getExternalStorageDirectory() + "/Music/ckyws8.wav");//same as before 
FileInputStream fis = new FileInputStream(file); 
fileFD = fis.getFD(); 

希望這是有幫助的。