在android中附加文件的问题

时间:2015-01-27 09:22:14

标签: android

我正在创建一个android应用程序,它将数据读取和写入位置/sdcard/ReadandWrite/中的文件。当我写入该文件时,它不会写入append mode.it将删除旧数据并写入新的one.please帮助我解决这个问题。这是我的代码。

private File openfile() {
    File sdCard = Environment.getExternalStorageDirectory();
    File dir = new File (sdCard.getAbsolutePath() + "/ReadandWrite");
    dir.mkdirs();
    File file = new File(dir, "myfile.txt");
    file.setWritable(true);
    if(file.exists())
    {
        file.canRead();
        file.setWritable(true);

    }
    else {
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return file;
}

private void writetofile() {


    try {
        File file=openfile();
        OutputStreamWriter myOutWriter =
                new OutputStreamWriter(new FileOutputStream(file));
        myOutWriter.append(text.getText());

        myOutWriter.close();
        myOutWriter.close();
        Toast.makeText(getBaseContext(),
                "Done writing SD 'mysdfile.txt'",
                Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        Toast.makeText(getBaseContext(), e.getMessage(),
                Toast.LENGTH_SHORT).show();
    }

1 个答案:

答案 0 :(得分:3)

您需要将FileOutputStream配置为使用append模式。来自JDK documentation

  

public FileOutputStream(String name,                   布尔附加)                    抛出FileNotFoundException

     

创建文件输出流以使用指定的文件写入文件   名称。如果第二个参数为true,则将写入字节   文件的结尾而不是开头。一个新的FileDescriptor   创建对象以表示此文件连接。

     

首先,如果有安全管理器,则调用其checkWrite方法   以名字为参数。

     

如果文件存在但是是目录而不是常规文件,那么   不存在但无法创建,或无法打开任何其他   之所以抛出FileNotFoundException。

     

参数:       name - 与系统相关的文件名       append - 如果为true,则将字节写入文件末尾而不是开头抛出:       FileNotFoundException - 如果文件存在但是是目录而不是常规文件,则不存在但无法创建,或者   由于任何其他原因无法打开。       SecurityException - 如果存在安全管理器且其checkWrite方法拒绝对该文件的写访问。以来:       JDK1.1参见:       SecurityManager.checkWrite(java.lang.String中)

所以改变 OutputStreamWriter myOutWriter = new OutputStreamWriter(new FileOutputStream(file));

OutputStreamWriter myOutWriter = new OutputStreamWriter(new FileOutputStream(file, true));