如何检查Android存储中是否存在已知的uri文件?

新手上路,请多包涵

文件uri是已知的,比如

`file:///mnt/sdcard/Download/AppSearch_2213333_60.apk`

我想检查这个文件是否可以在后台打开,怎么办?

原文由 Victor S 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

检查路径的文件是否存在,如下所示:

 File file = new File("/mnt/sdcard/Download/AppSearch_2213333_60.apk" );
if (file.exists()) {
 //Do something
}

请记住删除诸如“file://”之类的内容,否则使用:

  File file = new File(URI.create("file:///mnt/sdcard/Download/AppSearch_2213333_60.apk").getPath());
 if (file.exists()) {
  //Do something
 }

您还必须在 AndroidManifest.xml 中为您的应用程序设置适当的权限才能访问 sdcard:

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

原文由 alex 发布,翻译遵循 CC BY-SA 3.0 许可协议

我可能来晚了一点,但我一直在寻找类似问题的解决方案,最终能够找到所有可能的边缘情况的解决方案。解决方案如下:

 boolean bool = false;
        if(null != uri) {
            try {
                InputStream inputStream = context.getContentResolver().openInputStream(uri);
                inputStream.close();
                bool = true;
            } catch (Exception e) {
                Log.w(MY_TAG, "File corresponding to the uri does not exist " + uri.toString());
            }
        }

如果与 URI 对应的文件存在,那么您将有一个输入流对象可以使用,否则将抛出异常。

如果文件确实存在,请不要忘记关闭输入流。

笔记:

 DocumentFile sourceFile = DocumentFile.fromSingleUri(context, uri);
boolean bool = sourceFile.exists();

确实处理了大多数边缘情况,但我发现如果文件以编程方式创建并存储在某个文件夹中,则用户然后访问该文件夹并手动删除该文件(在应用程序运行时),DocumentFile.fromSingleUri 错误地说该文件存在。

原文由 mang4521 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题