Android 的新手,努力写入外部存储上的 .csv 文件
New to Android, stuggling to write to .csv file on external storage
Android 4.4.4
编写一个简单的应用程序来学习 Android 编程的基础知识。
运行 一个调试版本(在我的设备上而不是在模拟器中),在 Android Studio 的 USB 调试中,以及在与 USB 断开连接后在设备上。
我只想将文本数据写入外部存储器上的文本文件。现阶段先不管是内存还是SD卡(有安装SD卡)。
我已经在我的清单中设置了 WRITE_EXTERNAL_STORAGE 权限。
我正在检查是否安装了外部存储 - 它是。
我已经尝试了找到的代码 here:
File file = new File(myContext.getExternalFilesDir(null), "state.txt");
try {
FileOutputStream os = new FileOutputStream(file, true);
OutputStreamWriter out = new OutputStreamWriter(os);
out.write(data);
out.close();
}
我将文件名记录到 LOGCAT,它显示为
/storage/emulated/0/Android/data/com.amazed.matthew.brunel/files/file.csv
这看起来很合理。没有抛出异常,代码运行正常,只是没有创建文件!!那么,是因为我处于调试状态还是在其他地方创建了一个文件?我错过了什么吗?
谢谢。
您可以按照 Android 文档中的 this 示例进行操作:
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
的情况下,还请记住,根据文档:
Starting in KITKAT, no permissions are required to read or write to
the returned path; it's always accessible to the calling app. This
only applies to paths generated for package name of the calling
application. To access paths belonging to other packages,
WRITE_EXTERNAL_STORAGE and/or READ_EXTERNAL_STORAGE are required.
好的,我不完全理解为什么行为如下所述,但基本问题已 解决。
我关闭设备并重新启动 - 下次我连接 USB 电缆并在我的主机调试机器上查看 Windows 资源管理器....那里有我的文件。所以我不知道为什么如果不重新启动设备我就看不到它们,但它们就在那里。 奇怪!!
Android 4.4.4 编写一个简单的应用程序来学习 Android 编程的基础知识。 运行 一个调试版本(在我的设备上而不是在模拟器中),在 Android Studio 的 USB 调试中,以及在与 USB 断开连接后在设备上。
我只想将文本数据写入外部存储器上的文本文件。现阶段先不管是内存还是SD卡(有安装SD卡)。
我已经在我的清单中设置了 WRITE_EXTERNAL_STORAGE 权限。 我正在检查是否安装了外部存储 - 它是。
我已经尝试了找到的代码 here:
File file = new File(myContext.getExternalFilesDir(null), "state.txt");
try {
FileOutputStream os = new FileOutputStream(file, true);
OutputStreamWriter out = new OutputStreamWriter(os);
out.write(data);
out.close();
}
我将文件名记录到 LOGCAT,它显示为 /storage/emulated/0/Android/data/com.amazed.matthew.brunel/files/file.csv
这看起来很合理。没有抛出异常,代码运行正常,只是没有创建文件!!那么,是因为我处于调试状态还是在其他地方创建了一个文件?我错过了什么吗?
谢谢。
您可以按照 Android 文档中的 this 示例进行操作:
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
的情况下,还请记住,根据文档:
Starting in KITKAT, no permissions are required to read or write to the returned path; it's always accessible to the calling app. This only applies to paths generated for package name of the calling application. To access paths belonging to other packages, WRITE_EXTERNAL_STORAGE and/or READ_EXTERNAL_STORAGE are required.
好的,我不完全理解为什么行为如下所述,但基本问题已 解决。
我关闭设备并重新启动 - 下次我连接 USB 电缆并在我的主机调试机器上查看 Windows 资源管理器....那里有我的文件。所以我不知道为什么如果不重新启动设备我就看不到它们,但它们就在那里。 奇怪!!