在 android 本地存储中找不到创建的 .txt 文件
Posted
技术标签:
【中文标题】在 android 本地存储中找不到创建的 .txt 文件【英文标题】:Cannot find the created .txt file in android local storage 【发布时间】:2021-09-19 14:10:21 【问题描述】:总结
在android的本地或内部存储中创建txt文件时,文件资源管理器无法找到创建的文件。
说明
我有一个应用程序,可以将数组列表存储到 txt 文件中,并在需要时将其读回。
写入文件的函数
....
private void writeToFile(ArrayList<ImageModel> arrayList, String Filename)
try
FileOutputStream outputStreamWriter = requireContext().openFileOutput(Filename, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(outputStreamWriter);
Log.d(TAG, "writeToFile: arraylist "+arrayList.size());
oos.writeObject(arrayList);
oos.close();
outputStreamWriter.close();
catch (IOException e)
Log.e("Exception", "File write failed: " + e.toString());
....
读取文件的函数
....
private Object readFromFile(String Filename)
try
FileInputStream fis = requireContext().openFileInput(Filename);
ObjectInputStream ois = new ObjectInputStream(fis);
Object object = ois.readObject();
return object;
catch (Exception ex)
Log.d(TAG, "readFromFile: exception "+ex.toString());
return null;
....
所以,到目前为止一切正常。它正在写入和读取文件。但是,我在设备资源管理器或文件管理器中找不到相同的 txt 文件。根据文档,默认情况下openFileOutput
将在Android/data/packagename/files
中创建一个文件。但是,文件资源管理器也没有显示目录。
但是,App 正在写入和读取文件。当我打印readFromFile()
返回的对象大小时,它打印了预期的大小。但是,我在文件资源管理器中找不到该文件。
我尝试过的事情
我试图获得读写权限。但是,由于 android 10+ 在ScopedStorage
中不需要任何写入或读取权限,因此没有任何影响。
我尝试使用requireContext().getExternalFilesDir(null)
创建目录,它在Android
文件夹中创建了files
目录,然后我尝试写入和读取该文件。但是,Dir 是空的。
我什至尝试在文件资源管理器中检查show hidden files
选项。但是,没有运气。
【问题讨论】:
【参考方案1】:根据文档,默认情况下 openFileOutput 将在 Android/data/packagename/files 中创建一个文件
不,不会。 openFileOutput()
写入的位置与您通过 getFilesDir()
获得的位置相同,Android SDK 将其称为 internal storage。
但是,文件资源管理器也没有显示目录。
只有您的应用可以访问您的部分内部存储空间。使用开发工具,Android Studio 的设备文件资源管理器可以向您展示可调试应用的内部存储,例如您的应用的 debug
构建。
我尝试使用 requireContext().getExternalFilesDir(null) 创建目录,它在 Android 文件夹中创建了文件目录,然后我尝试写入和读取文件。但是,Dir 是空的。
在 Android 10+ 上,其他应用无法访问您的应用特定位置,Android SDK 将其称为 external storage。
【讨论】:
这是有道理的。那么,如何将文件保存到指定位置?假设我想将其保存到emulated/0/myApp
。如何将文件保存到此位置?在Android
文件夹之外。我可以在这里发表评论,以解决我未来的问题以寻求您的帮助吗?
@AnirudhsinhJadeja:“我怎样才能将文件保存到这个位置?”——你不能在 Android 11+ 上。我建议您让用户决定您应该在用户的设备(或用户选择的云服务提供商)上的哪个位置存储用户的 内容。您可以通过存储访问框架来做到这一点,使用 ACTION_CREATE_DOCUMENT
和 ACTION_OPEN_DOCUMENT_TREE
之类的东西。
@AnirudhsinhJadeja:“我可以在这里发表评论,以解决我未来的问题,寻求您的帮助吗?” -- 欢迎您在站点规则范围内做任何您想做的事情。不过,问题比 cmets 更受欢迎。
谢谢。我了解由于安全原因,应用程序只允许使用它的内部存储。对于所有其他目的,用户必须将文件保存到云中。明白了。
@AnirudhsinhJadeja:“出于所有其他目的,用户必须将文件保存到云端”——不,但用户需要参与存储在任意位置,并且整个应用程序看不到其他应用程序文件只是通过文件系统。 This 14-post series 使用存储访问框架和MediaStore
概述。以上是关于在 android 本地存储中找不到创建的 .txt 文件的主要内容,如果未能解决你的问题,请参考以下文章
Azure Web 应用程序“ERR:带指纹的证书:...'在本地计算机证书存储中找不到。”