2013-07-24 48 views
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? 

回答

1

而不是使用OutputStreamWriter使用的FileWriter FileWriter的fileWritter =新的FileWriter的(文件,真正的);當u傳遞true它追加contents.try這

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(); 
1

改變這一行:

fos = new FileOutputStream(file); 

要:

fos = new FileOutputStream(file, true); 

這將打開,這樣的數據可以附加文件。

JavaDocs for FileOutputStream

1

使用

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

第二參數應傳遞作爲true其中將追加,而不是覆蓋

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(); 
        } 
       } 

炎上數據你我已經測試過它對我有用。