我正在开发一个需要创建文本文件并在其中写入的Android应用程序。我使用以下代码:
public void onButtonClick(View view) {
writeInFile("Hello world");
}
public void writeInFile(String string) {
String dir = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
File file = new File(dir, "MyFile.txt");
try {
FileWriter fw = new FileWriter(file,true);
//fw.append(string);
fw.write(string);
Toast.makeText(this, "You wrote in the file", Toast.LENGTH_SHORT).show();
} catch(Exception e){
e.printStackTrace();
}
}
当我运行应用程序时,文件已创建,我可以看到吐司消息,但其中没有任何内容。我试过fw.append和fw.write。在我的清单中,我已经写了必要的权限来写入外部存储。我想直接在三星Galaxy Tab 4(Marshmallow)的外部存储器中写入,而不是在SD卡上。
答案 0 :(得分:0)
首先,始终close()
。您尚未关闭FileWriter
。
其次,始终flush()
。你没有冲洗FileWriter
。
第三,即使你flush()
和close()
,由于缓冲文件系统的工作方式,字节可能还没有写入磁盘。您正在从Android应用程序刷新到操作系统,但是对磁盘的写入可能会被操作系统缓冲并延迟。为了解决这个问题,我不会使用FileWriter
,而是FileOutputStream
(有时会包含在OutputStreamWriter
中),因此您可以在{{1}上调用getFd().sync()
调用FileOutputStream
之后和调用flush()
之前。
第四,在close()
编制索引之前,您无法在桌面操作系统文件管理器中看到此文件及其内容。使用其他方法测试结果(例如MediaStore
),或使用adb pull
及其MediaScannerConnection
方法告诉scanFile()
索引新创建的文件。
以下代码演示除MediaStore
位之外的所有内容:
MediaScannerConnection