Android新手,挣扎着在外部存储器上写入.csv文件

Android新手,挣扎着在外部存储器上写入.csv文件,android,android-external-storage,Android,Android External Storage,安卓4.4.4 编写一个简单的应用程序来学习Android编程的基础知识。 运行调试构建(在我的设备上,不在emulator中),既可以在Android Studio的USB调试中运行,也可以在断开USB连接后在设备上运行 我只想将文本数据写入外部存储器上的文本文件。在这个阶段,不要在意它是内部存储还是SD卡(安装了SD卡) 我已在清单中设置了写入外部存储权限。 我正在检查外部存储器是否已安装-它已安装 我已经尝试了我找到的代码 我将文件名记录到LOGCAT,它显示为 /存储/仿真/0/Andr

安卓4.4.4 编写一个简单的应用程序来学习Android编程的基础知识。 运行调试构建(在我的设备上,不在emulator中),既可以在Android Studio的USB调试中运行,也可以在断开USB连接后在设备上运行

我只想将文本数据写入外部存储器上的文本文件。在这个阶段,不要在意它是内部存储还是SD卡(安装了SD卡)

我已在清单中设置了写入外部存储权限。 我正在检查外部存储器是否已安装-它已安装

我已经尝试了我找到的代码

我将文件名记录到LOGCAT,它显示为 /存储/仿真/0/Android/data/com.mazzed.matthew.brunel/files/file.csv

这看起来很合理。没有抛出异常,代码运行正常,只是没有创建文件!!那么,是否因为我在调试中而在其他地方创建了一个文件?我错过什么了吗

谢谢。

以下是Android文档中的示例:

void write() {
    File file = new File(getExternalFilesDir(null), "state.txt");

    try {
        OutputStream os = new FileOutputStream(file);
        os.write(data);
    } catch (IOException e) {
        Log.w("ExternalStorage", "Error writing " + file, e);
    } finally {
        os.close();
    }
}
在不使用OutputStreamWriter的情况下,还要记住,根据文档:

从KITKAT开始,不需要读写权限 返回路径;呼叫应用程序始终可以访问它。这 仅适用于为调用的包名生成的路径 应用要访问属于其他包的路径, 需要写入外部存储和/或读取外部存储


好的,我不完全理解为什么行为会像下面描述的那样,但基本问题已经解决了。


我关闭设备电源并重新启动-下次我连接USB电缆并在我的主机调试机器上查看Windows资源管理器时…有我的文件。所以我不知道为什么我不能看到他们没有电源循环的设备,但他们在那里怪异

1)它是什么-
state.txt
还是
file.csv
?2) 什么是
数据
?ps:csv文件对于Android来说是一个非常糟糕的选择。有更好的数据存储,比如SQLite和SharedPreferences@Budius-从给定链接粘贴代码段。我的文件名符合完整路径/stor……/file.csv。之所以选择csv,是因为平面文件适合应用程序,并且数据不需要索引,所以应该紧凑且快速。不索引,紧凑且快速。谷歌搜索“android共享参考”。我重复一遍。csv对于Android来说是一个非常糟糕的选择。很高兴告诉你为什么csv不好-但到目前为止你还没有告诉我!!!这是因为MTP连接(Android设备或仿真器与PC之间的USB连接)不是与Android文件系统的直接连接,而是与文件系统之间的桥梁,在两者之间进行缓存。因此,重新启动设备可以刷新此缓存。使用某种类型或文件管理器或终端检查文件是一种直接访问方式,不会出现此问题。@Budius-奇怪的是,我有两个测试设备,它们的行为不同。4.4.4版本的摩托罗拉手机就是我描述的,但4.4.2版本的三星平板电脑却不是!一切都可以立即在三星手机上看到。在完成的应用程序中不会出现问题-只是在开发过程中有点尴尬。谢谢你的帮助。不是100%确定,但据我记忆所及,三星设备上的SD卡直接连接到文件系统。它们的行为就像一个USB闪存驱动器。是的,Android的世界充满了这些奇怪的东西。这是为它开发的乐趣的一部分
void write() {
    File file = new File(getExternalFilesDir(null), "state.txt");

    try {
        OutputStream os = new FileOutputStream(file);
        os.write(data);
    } catch (IOException e) {
        Log.w("ExternalStorage", "Error writing " + file, e);
    } finally {
        os.close();
    }
}