将文本文件保存到 Android 中的公共内部存储器位置

Posted

技术标签:

【中文标题】将文本文件保存到 Android 中的公共内部存储器位置【英文标题】:Saving a text file to public internal memory location in Android 【发布时间】:2015-09-16 13:35:46 【问题描述】:

我正在编写一个应用程序,我想在其中附加一个文本文件,因为会发生各种用户操作。我希望文本文件位于内部存储器中。如果用户使用 USB 电缆连接平板电脑,我希望文本文件在 Windows 资源管理器下也可见。

我查看了很多示例,并且能够将文本文件写入内存,但我似乎无法使文件在文件管理器中可见。

有谁知道是否可以将文本文件写入内部存储器,并让用户在 Windows 资源管理器下看到它?还是我需要使用 SD 卡而不是内存?

【问题讨论】:

【参考方案1】:

好的,我现在可以按我的意愿工作了。它将文本文件(并在每次写入时附加)保存到平板电脑/手机的不可移动的 DOWNLOAD 文件夹中。我的目标是最低 SDK 版本为 16(4.1.2 Jellybean)。

我将在下面发布代码,以供其他对此问题感到困惑的人使用。

try 
File path = Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_DOWNLOADS);
File myFile = new File(path, "mytextfile.txt");
FileOutputStream fOut = new FileOutputStream(myFile,true);
    OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
    myOutWriter.append("the text I want added to the file");
    myOutWriter.close();
    fOut.close();

    Toast.makeText(this,"Text file Saved !",Toast.LENGTH_LONG).show();
    

    catch (java.io.IOException e) 

    //do something if an IOException occurs.
    Toast.makeText(this,"ERROR - Text could't be
    added",Toast.LENGTH_LONG).show();
                      

您还需要在清单中添加以下行:

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

您需要导入:

import java.io.OutputStreamWriter;
import java.io.FileOutputStream;
import java.io.File;

【讨论】:

【参考方案2】:

我希望文本文件位于内存中。

从编程的角度来看,“内部存储器”没有太多意义。

如果用户使用 USB 电缆连接平板电脑,我希望文本文件也能在 Windows 资源管理器中显示。

那就是external storage。

但我似乎无法在文件管理器中显示该文件。

使用MediaScannerConnection 及其scanFile() 方法告诉MediaStore 该文件。这至少可以让 MTP 客户端(如 Windows 的资源管理器窗口)看到该文件。请注意,您可能需要在该资源管理器窗口中“刷新”或“重新加载”才能让 Windows 获取新文件。

【讨论】:

“内部存储器”是指平板电脑的内部闪存(与 SD 卡相对)。 @rittenhk:是的,但是从Android SDK的角度来看,您所说的“内存”是指internal storage(http://commonsware.com/blog/2014/04/07/storage-situation-internal-storage.html) and [external storage。在 Android SDK 完全支持的范围内,SD 卡是removable storage。您的“出现在 Windows 中”要求意味着外部存储就是您想要的。 好的,我现在看到了不同之处。谢谢! 我很想做'rittenhk'的工作,但我的设备没有SD卡和USB,我该怎么办??? @CommonsWare @saulyasar:如果没有 USB,那么我不知道 Windows 文件资源管理器将如何查看内容。您可能需要向您的设备制造商寻求建议。

以上是关于将文本文件保存到 Android 中的公共内部存储器位置的主要内容,如果未能解决你的问题,请参考以下文章

将字符串保存到内部存储上的特定文件夹 - Android

写入 Android 中的内部私有存储

Java / Android - 读取、操作 XML 文件并将其保存到内部存储

将文件存储在 Flutter 中的 Android 101112+ 下载文件夹中。

Android 媒体文件保存公共存储目录获取Uri

将文件从内部存储复制到Android中的外部存储