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

以前的答案可能很短,但很有帮助。如果其他人遇到同样的误解,以下是我为使代码正常工作所做的更改:

首先,因为它不是资产中的文件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();

希望这会有所帮助。

于 2013-03-29T21:37:46.663 回答
1

AssetManager用于访问应用程序的资产,即assets/项目源代码树中目录的内容。它不适用于访问内部或外部存储上的文件,这就是您的代码不起作用的原因。

于 2013-03-29T19:23:53.213 回答
0

读取资产文件流的正确方法如下:
InputStream is = ctx.getAssets().open("fileName");

于 2021-09-22T08:12:27.410 回答