Android getAssets()。openFd(string) - 找不到文件

时间:2013-03-29 19:12:34

标签: android audio file-io filenotfoundexception

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

的列表

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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();

希望这有用。