在 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_DOCUMENTACTION_OPEN_DOCUMENT_TREE 之类的东西。 @AnirudhsinhJadeja:“我可以在这里发表评论,以解决我未来的问题,寻求您的帮助吗?” -- 欢迎您在站点规则范围内做任何您想做的事情。不过,问题比 cmets 更受欢迎。 谢谢。我了解由于安全原因,应用程序只允许使用它的内部存储。对于所有其他目的,用户必须将文件保存到云中。明白了。 @AnirudhsinhJadeja:“出于所有其他目的,用户必须将文件保存到云端”——不,但用户需要参与存储在任意位置,并且整个应用程序看不到其他应用程序文件只是通过文件系统。 This 14-post series 使用存储访问框架和MediaStore 概述。

以上是关于在 android 本地存储中找不到创建的 .txt 文件的主要内容,如果未能解决你的问题,请参考以下文章

MVN 安装,在本地存储库中找不到工件

Azure Web 应用程序“ERR:带指纹的证书:...'在本地计算机证书存储中找不到。”

SBT 在本地 maven 存储库中找不到文件,尽管它在那里

如果在反应中找不到本地存储值,则重定向到特定页面

在 SDK 管理器中找不到 Android 支持存储库

本地和原始存储库 git 之间没有区别。但是当其他人克隆项目时,在 H2DB 中找不到该表?