0

getAssets()openFD() は失敗します。

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

何か案は?

4

3 に答える 3

1

AssetManagerassets/プロジェクトのソース ツリーのディレクトリの内容である、アプリケーションのアセットにアクセスするためのものです。内部または外部ストレージ上のファイルにアクセスするためのものではないため、コードが機能しません。

于 2013-03-29T19:23:53.213 に答える
1

以前の回答は、短いかもしれませんが、役に立ちました。他の人が同じ誤解に陥った場合に備えて、コードを機能させるために私が変更したものを次に示します。

まず、アセット内のファイルAssetFileDescriptor fileFD=null;が変更されるわけではないため、FileDescriptor fileFD=null;機能が異なり、コードの他の部分も変更する必要があることに注意してください。

a を取得するにはFileDescriptoraFileInputStreamが必要なので、コードの他の部分は次のようになります。

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

これが役に立てば幸いです。

于 2013-03-29T21:37:46.663 に答える