2017-01-10 105 views
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。

+0

'AssetManager'用於打開資產。 「AssetFileDescriptor」用於資產。您的文件不是資產。你爲什麼要創建一個'AssetFileDescriptor'? – CommonsWare

+0

@CommonsWare最終,我試圖使用:PdfRenderer renderer = new PdfRenderer(getSeekableFileDescriptor());所以我試圖從getSeekableFileDescriptor()方法返回一個ParcelFileDescriptor。你爲什麼說我的檔案不是資產?我不明白這個區別。 – Hap

回答

1

你爲什麼說我的文件不是資產?

因爲它不是資產。資產是您的應用程序的一部分(例如,src/main/assets/),並打包在您的APK中。

所以我試圖讓ParcelFileDescriptor

使用open() on ParcelFileDescriptor上一個File打開ParcelFileDescriptor

相關問題