Android |获取文件(.zip)并保存

时间:2016-03-15 20:57:06

标签: java android

在我的应用中,我会从外部存储中打开一个(.zip)文件并将其保存在内部应用存储中。

要打开文件,我使用:

Intent intent = new Intent();
intent.setType("*/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select"), requestCode);

然后,我试着用它:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 7 && resultCode == Activity.RESULT_OK && null != data) {
        Log.d("IMPORT","Start Process");
        Uri uri = data.getData();
        File file = new File(uri.getPath());
        String path = file.getAbsolutePath();
        //some function

        //error:
        InputStream is = new FileInputStream(path);
    }
}

现在,功能InputStream is = new FileInputStream(path);我返回java.io.FileNotFoundException: /document/primary:Download/example/file.zip: open failed: ENOENT (No such file or directory)

我保存图片时没有问题,但我从未保存过zip文件。

1 个答案:

答案 0 :(得分:3)

  

要打开文件,我使用:

首先,它不会打开文件。这要求访问一段内容。

其次,如果您想要ZIP文件,您可能希望使用application/zip,而不是*/*。否则,欢迎用户选择ZIP文件以外的其他内容。

  

我保存图片时没有问题

如果您使用的代码与上面使用的相同,那么您的代码将无法用于大多数Android设备,无论是图片,ZIP文件还是其他任何设备。

A Uri is not a file.

Uri是某些内容的不透明句柄,在其他应用中保存。要使用Uri,请从附近的ContentResolver(例如,您的Context)获取Activity。然后,使用openInputStream()获取内容的InputStream

如果 Uri 发生以获得file方案,则getPath()将成为文件系统路径。但是: