java - 内部文件在 Android 上不“可用” - File.exists() 对任何文件都返回 false
问题描述
我正在尝试访问存储在内部存储中的 2.45GB Geopackage 文件,但每当我尝试访问它时,我都会收到“文件不存在”错误。
gpkg 文件正在通过 DownloadManager 下载到外部存储中,然后再复制到内部存储中,但是当我调用 时new File(getContext().getFilesDir(), "roads.gpkg").exists();
,我得到“假”返回。不仅如此,当我跑步时
File[] files = getContext().getFilesDir().listFiles();
for(File file : files){
Log.i("FILE", file.getAbsolutePath());
}
该文件不显示。
为了确保这不是来自 DownloadManager 或我的复制方法的意外行为,我手动将文件复制到“Android/data/uk.co.alexks.greenroutes/files”,以及一个 11 字节的 txt 文件,'test .txt',使用我的 Windows 笔记本电脑。同样,对于上面的 listFiles() 代码输出,这些文件都没有返回 trueFile.exists()
或显示(见下文)。
这是我尝试访问文件时的完整代码:
File geopackage = new File(getContext().getFilesDir(), "roads.gpkg");
Log.i("GEOPACKAGE", String.format("GPKG File: %s", geopackage.getPath()));
Log.i("GEOPACKAGE", String.format("Exists? %s", geopackage.exists()?"T":"F"));
Log.i("FILE", getContext().getFilesDir().getPath());
File[] files = getContext().getFilesDir().listFiles();
for(File file : files){
Log.i("FILE", file.getAbsolutePath());
}
//Pass geopackage to a new object that uses the Geopackage-Android library to handle it.
这是 Logcat 输出:
I/GEOPACKAGE: GPKG File: /data/user/0/uk.co.alexks.greenroutes/files/roads.gpkg
I/GEOPACKAGE: Exists? F
I/FILE: /data/user/0/uk.co.alexks.greenroutes/files
/data/user/0/uk.co.alexks.greenroutes/files/DATA_disk_creation_time_its
/data/user/0/uk.co.alexks.greenroutes/files/DATA_disk_creation_time_vts_labl_uk.co.alexks.greenroutes_default
/data/user/0/uk.co.alexks.greenroutes/files/DATA_disk_creation_time_vts_no_pois_uk.co.alexks.greenroutes_default
/data/user/0/uk.co.alexks.greenroutes/files/DATA_disk_creation_time_vts_uk.co.alexks.greenroutes_default
/data/user/0/uk.co.alexks.greenroutes/files/DATA_disk_creation_time_vts_inaka_uk.co.alexks.greenroutes_default
/data/user/0/uk.co.alexks.greenroutes/files/DATA_disk_creation_time_its_ter
/data/user/0/uk.co.alexks.greenroutes/files/com.google.android.gms.maps._m_u
/data/user/0/uk.co.alexks.greenroutes/files/_m_t
I/FILE: /data/user/0/uk.co.alexks.greenroutes/files/DATA_ServerControlledParametersManager.data.uk.co.alexks.greenroutes
/data/user/0/uk.co.alexks.greenroutes/files/ZoomTables.data
和预期的输出:
I/GEOPACKAGE: GPKG File: /data/user/0/uk.co.alexks.greenroutes/files/roads.gpkg
I/GEOPACKAGE: Exists? T
I/FILE: /data/user/0/uk.co.alexks.greenroutes/files
/data/user/0/uk.co.alexks.greenroutes/files/roads.gpkg
/data/user/0/uk.co.alexks.greenroutes/files/test.txt
我的 Android 清单具有以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
对于它的价值,我知道我应该使用 File.isFile() 来检查文件是否有效,但这在这里没有帮助。
任何帮助将不胜感激!:)
解决方案
好的,事实证明该文件确实不存在于内部存储中(我想我卸载了该应用程序以测试权限请求,但我在“Android/data/package/files/”(外部存储)中看到了数据集的副本所以认为它确实存在),正如@CommonWares 在评论中指出的那样,从 Windows 可见的 Android/data/package/files 文件夹不是内部存储,它是外部存储,因此将文件复制到那里什么也没做。
推荐阅读
- javascript - JavascriptExecutor:使用名称设置属性
- reactjs - React 将未安装的组件添加到数组
- javascript - 在 javascript 中使用正则表达式验证版本号
- java - @ComponentScan 注解适用于非 @Configuration 类
- java - 将 JBoss AS 7.1.1 迁移到 Wildfly 8.1.0 - 错误:java.lang.LinkageError
- android-studio - Android Studio 3.2.1:无尽的清洁项目
- python-2.7 - 使用 pyinstaller 编译后,序数大于 128 的 Unicode 字符不会打印
- slack - 有没有办法通过 API 获得 Slack Enterprise 网格图像?
- jquery - Jquery,用逗号分隔打印多个值
- javascript - Graphql Apollo Server + Vue => 图片上传