我有一个存储在Android项目中的文件,如下所示:
InputStream in = getResources().openRawResource(id);
OutputStream out = new FileOutputStream(new File(dir, name));
ByteStreams.copy(in, out);
out.flush();
out.close();
其中dir为:/data/user/0/com.aaa.app/files/media
,名称为:my_file
。
但是,当我尝试以下操作时,我收到一个FileNotFoundException(从assetManager.openFd()抛出):
private ParcelFileDescriptor getSeekableFileDescriptor() {
Context context = getContext();
AssetManager assetManager = context.getAssets();
AssetFileDescriptor assetFileDescriptor;
ParcelFileDescriptor fileDescriptor = null;
try {
assetFileDescriptor = assetManager.openFd("/data/user/0/com.aaa.app/files/media/my_file");
fileDescriptor = assetFileDescriptor.getParcelFileDescriptor();
return fileDescriptor;
}
catch (IOException e) {
Log.d(TAG, e.toString());
}
return fileDescriptor;
}
我也试过将以下内容传递给openFd():
"data/user/0/com.aaa.app/files/media/my_file",
"/media/my_file",
"media/my_file",
"/my_file",
"my_file"
然后我在上面的每一个中添加了“.pdf”。仍然没有成功。我为上面的每一个都获得了FileNotFound。
答案 0 :(得分:1)
为什么说我的文件不是资产?
因为它不是资产。资产是您应用的一部分(例如var targetElement = event.target || event.srcElement;
if((targetElement == "IMG")
{
...
}
),并打包在您的APK中。
所以我试图获得一个ParcelFileDescriptor
使用open()
on ParcelFileDescriptor
在src/main/assets/
上打开ParcelFileDescriptor
。