如何为assetManager.openFd()找到正确的文件路径?

时间:2017-01-10 22:36:32

标签: java android io

我有一个存储在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。

1 个答案:

答案 0 :(得分:1)

  

为什么说我的文件不是资产?

因为它不是资产。资产是您应用的一部分(例如var targetElement = event.target || event.srcElement; if((targetElement == "IMG") { ... } ),并打包在您的APK中。

  

所以我试图获得一个ParcelFileDescriptor

使用open() on ParcelFileDescriptorsrc/main/assets/上打开ParcelFileDescriptor