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
有什么想法吗?
答案 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();
希望这有用。