在 android 本地存储中找不到创建的 .txt 文件

Cannot find the created .txt file in android local storage

总结

在 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() 返回的对象大小时,它打印了预期的大小。但是,我无法在文件资源管理器中找到该文件。

我尝试过的东西

  1. 我试图获得写入和读取权限。但是,由于 android 10+ 在 ScopedStorage 中不需要任何写入或读取权限,所以它没有任何影响。

  2. 我尝试使用 requireContext().getExternalFilesDir(null) 创建目录,它在 Android 文件夹中创建了 files 目录,然后我尝试写入和读取文件。但是,目录是空的。

  3. 我什至尝试检查文件资源管理器中的 show hidden files 选项。但是,运气不好。

According to docs, by default openFileOutput will create a file inside Android/data/packagename/files

不,不会。 openFileOutput() 写入与您通过 getFilesDir() 相同的位置,这就是 Android SDK 所指的 internal storage.

But, file explorer is not showing the dir either.

只有您的应用可以访问您的内部存储部分。使用开发工具,Android Studio 的设备文件资源管理器可以向您显示可调试应用程序的内部存储空间,例如您的应用程序的 debug 版本。

I tried with creating the dir using requireContext().getExternalFilesDir(null) which created the files directory inside Android folder and then I tried to write and read the file. But, Dir is empty.

在 Android 10+ 上,其他应用程序无法访问您的应用程序特定位置,Android SDK 将其称为 external storage