0
我有存儲在Android項目像這樣的文件:如何找到assetManager.openFd()的正確文件路徑?
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。
'AssetManager'用於打開資產。 「AssetFileDescriptor」用於資產。您的文件不是資產。你爲什麼要創建一個'AssetFileDescriptor'? – CommonsWare
@CommonsWare最終,我試圖使用:PdfRenderer renderer = new PdfRenderer(getSeekableFileDescriptor());所以我試圖從getSeekableFileDescriptor()方法返回一個ParcelFileDescriptor。你爲什麼說我的檔案不是資產?我不明白這個區別。 – Hap