在我的应用中,我会从外部存储中打开一个(.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文件。
答案 0 :(得分:3)
要打开文件,我使用:
首先,它不会打开文件。这要求访问一段内容。
其次,如果您想要ZIP文件,您可能希望使用application/zip
,而不是*/*
。否则,欢迎用户选择ZIP文件以外的其他内容。
我保存图片时没有问题
如果您使用的代码与上面使用的相同,那么您的代码将无法用于大多数Android设备,无论是图片,ZIP文件还是其他任何设备。
Uri
是某些内容的不透明句柄,在其他应用中保存。要使用Uri
,请从附近的ContentResolver
(例如,您的Context
)获取Activity
。然后,使用openInputStream()
获取内容的InputStream
。
如果 Uri
发生以获得file
方案,则getPath()
将成为文件系统路径。但是:
Uri
将不会有file
计划(特别是in the N Developer Preview, the file
scheme is已禁止生效)