我正在开发一个需要创建文本文件并在其中写入的Android应用程序。我使用以下代码

时间:2015-11-25 01:26:09

标签: android android-external-storage file-writing

我正在开发一个需要创建文本文件并在其中写入的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卡上。

1 个答案:

答案 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

(来自this sample project