2

我创建了一个文件,当我运行程序时,数据被写入文件,但是当我再次运行程序时,新数据覆盖旧数据。我需要一旦程序运行并收集数据,这些数据就可以彼此级联写入文件,而不会覆盖文件中的先前数据。

这段代码运行成功,但是当我再次运行程序时,会发生我不需要的覆盖,我需要将以前的数据保存在文件中,并很快在它旁边写入新数据。编辑此代码后,它看起来像:

 public class MainActivity extends Activity {
        File file;
        File sdCard;
        FileOutputStream fos;
        OutputStreamWriter myOutWriter;
        String FileName = "Output3.txt";
        String eol;
        OutputStream fos1;
        FileWriter fw ;
        BufferedWriter writer;
        BufferedWriter bw ;
        PrintWriter out;
        EditText txtData;
        Button btnWriteSDFile;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
                    sdCard =getExternalFilesDir(null);
                    file = new File(sdCard,FileName);
            txtData = (EditText) findViewById(R.id.editText1);
            btnWriteSDFile = (Button) findViewById(R.id.button1);
            btnWriteSDFile.setOnClickListener(new OnClickListener() 
            {
                public void onClick(View v)
                {
        try {
                fos = new FileOutputStream(file);
                myOutWriter =new OutputStreamWriter(fos);
                eol = System.getProperty("line.separator");
                writer = new BufferedWriter(myOutWriter);
                                    writer.append(txtData.getText() + eol);// write this text.
                                    writer.flush();
                                    fos.close();

                                    Toast.makeText(v.getContext(),"Done writing SD 'Output.txt'", Toast.LENGTH_SHORT).show();
                                    txtData.setText("");
                                } catch (Exception e) {
                                    // e.printStackTrace();
                                    Toast.makeText(v.getContext(), e.getMessage(),Toast.LENGTH_SHORT).show();
                                }
                                finally{
                                    try {
                                        fos.close();
                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
                                }
                            }
                        });
                }





please,can any one answer me?
4

4 回答 4

1

而不是使用 OutputStreamWriter 使用 Filewriter FileWriter fileWritter = new FileWriter(file,true); 当你传递 true 时,它​​会附加内容。试试这个

FileWriter myOutWriter = new FileWriter(file.getName(),true);
            eol = System.getProperty("line.separator");
            writer = new BufferedWriter(myOutWriter);
                                writer.write(txtData.getText() + eol);// write this text.
                                writer.close();
                                fos.close();
于 2013-07-24T04:19:46.987 回答
1

更改此行:

fos = new FileOutputStream(file);

至:

fos = new FileOutputStream(file, true);

这将打开文件,以便可以附加数据。

FileOutputStream 的 JavaDocs

于 2013-07-24T04:20:39.590 回答
1

利用

FileWriter writer = new FileWriter("yourfilename", true);

应该传递第二个参数,因为true它将附加数据而不是覆盖

于 2013-07-24T04:21:13.263 回答
0
try {
                    File myFile = new File(Environment.getExternalStorageDirectory() + File.separator + "test.txt");
                   // this changed bye fos = new FileOutputStream(myFile) to

                    fos = new FileOutputStream(myFile,true);
                    //FileWriter writer = new FileWriter("yourfilename", true);

                    myOutWriter = new OutputStreamWriter(fos);
                    eol = System.getProperty("line.separator");
                    writer = new BufferedWriter(myOutWriter);
                    writer.append("\n");
                    writer.append(txtData.getText() + eol);// write this text.
                    writer.flush();
                    fos.close();

                    Toast.makeText(v.getContext(),
                            "Done writing SD 'Output.txt'", Toast.LENGTH_SHORT)
                            .show();
                    txtData.setText("");
                } catch (Exception e) {
                    // e.printStackTrace();
                    Toast.makeText(v.getContext(), e.getMessage(),
                            Toast.LENGTH_SHORT).show();
                } finally {
                    try {
                        fos.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

Enjoye i have tested it is work for me.

于 2013-07-24T04:44:42.470 回答