2012-12-08 26 views
9

Ich habe eine App, die in eine Textdatei lesen und schreiben muss. Ich habe es gelesen, aber ich habe es nicht geschrieben. Die Idee ist, dass, wenn ich auf den Speichern-Button auf dem Bildschirm klicke, alle Informationen, die in die Textansichten eingegeben wurden, in ein Array gespeichert werden und die einzelnen Segmente des Arrays in die Textdatei geschrieben werden. Dies ist mein Code für den Schreibabschnitt:Wie schreibe ich in eine TXT-Datei in Android?

File file = getFileStreamPath("test.txt"); 

if (!file.exists()) { 
    file.createNewFile(); 
} 

FileOutputStream writer = openFileOutput(file.getName(), Context.MODE_PRIVATE); 

for (String string: data){ 
    writer.write(string.getBytes()); 
    writer.flush(); 
} 

writer.close(); 

Überprüfen Sie die android docs:

public class AddOrModify extends Activity { 

    private Button Savebtn; 
    private Button Cancelbtn; 
    private EditText NameofRoute; 
    private EditText Address1; 
    private EditText City1; 
    private EditText State1; 
    private EditText Zip1; 
    private EditText Address2; 
    private EditText City2; 
    private EditText State2; 
    private EditText zip2; 




     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.add_or_modify); 

      Savebtn = (Button)findViewById(R.id.savebtn); 
      Savebtn.setOnClickListener(new btnlistenersave()); 

      Cancelbtn = (Button)findViewById(R.id.cancelbtn); 
      Cancelbtn.setOnClickListener(new btnlistenercancel()); 

     } 

     private class btnlistenersave implements View.OnClickListener{ 
      public void onClick(View v) { 

       NameofRoute = (EditText)findViewById(R.id.NameofRoute); 
       Address1 = (EditText)findViewById(R.id.editAddress1); 
       City1 = (EditText)findViewById(R.id.City1); 
       State1= (EditText)findViewById(R.id.State1); 
       Zip1 = (EditText)findViewById(R.id.Zip1); 
       Address2= (EditText)findViewById(R.id.Address2); 
       City2 = (EditText)findViewById(R.id.City2); 
       State2 = (EditText)findViewById(R.id.State2); 
       zip2 = (EditText)findViewById(R.id.Zip2); 

       //String[] mySettings ={NameofRouteinput,Address1input,City1input, State1input,Zip1input,Address2input,City2input,State2input,Zip2input,";"}; 


       // if(mySettings != null){ 
       try{ 

        String NameofRouteinput = NameofRoute.getText().toString(); 
        String Address1input = Address1.getText().toString(); 
        String City1input = City1.getText().toString(); 
        String State1input=State1.getText().toString(); 
        String Zip1input = Zip1.getText().toString(); 
        String Address2input =Address2.getText().toString(); 
        String City2input = City2.getText().toString(); 
        String State2input = State2.getText().toString(); 
        String Zip2input= zip2.getText().toString(); 
        OutputStreamWriter out = new OutputStreamWriter(openFileOutput("myaddress.txt",0)); 

        String[] mySettings ={NameofRouteinput,Address1input,City1input, State1input,Zip1input,Address2input,City2input,State2input,Zip2input,";"}; 


        for(int i =0; i < mySettings.length; i++) 
        out.write(mySettings[i]); 
        out.close(); 
       } 
       catch (java.io.IOException e){ 

       } 


       Intent i = new Intent(AddOrModify.this, Frontpage.class); 
       startActivity(i); 

      } 

     } 

     private class btnlistenercancel implements View.OnClickListener{ 

      public void onClick(View v) { 
       Intent i = new Intent(AddOrModify.this, Frontpage.class); 
       startActivity(i); 
      } 

     } 

} 

Antwort

4

Sie FileOutputStream statt OutputStreamWriter, so etwas wie diese verwenden können.

+0

schreiben kann ich tun dies mit einem ganzes Array obwohl? In deinem Beispiel schreibe ich eine Zeichenfolge, ich muss das für viele Werte tun, oder muss ich sie einzeln machen? –

+0

Ja, sollte auch funktionieren ... Ich habe die Antwort für Sie aktualisiert. Ich hoffe, ich konnte helfen. – mari

+0

Was soll im Bereich "Daten" gehen? Ich habe versucht, eine Zeichenfolge, ein String-Array und eine Menge anderer Dinge dort zu setzen. Entweder gibt es mir einen Fehler, oder alle anderen Zeilen erhalten eine IOException. –

12

mit mari-Lösung war ich immer

 java.lang.IllegalArgumentException: contains a path separator 

dann habe ich versucht, folgende und es funktionierte für mich

File root = new File(DIRECTORY_PATH); 
    File gpxfile = new File(root, "samples.txt"); 
    FileWriter writer = new FileWriter(gpxfile); 
    writer.append("First string is here to be written."); 
    writer.flush(); 
    writer.close(); 

Sie Schleife kann es mehrere Zeilen

+1

Was ist DIRECTORY_PATH gleich? – tgkprog

+2

@tgkprog Sie können entweder das Standardverzeichnis 'Environment.getExternalStorageDirectory(). ToString()' verwenden oder, wenn Sie Ihr eigenes Verzeichnis erstellt haben, dann etwas wie 'Environment.getExternalStorageDirectory(). ToString() + "/ Ihr Verzeichnis/"' –

+0

Ahh verstanden :) Ich würde lieber Dateipfad = neue Datei (Environment.getExternalStorageDirectory(), "Ihr Verzeichnis/Unterpfad/a") Dies wird nach dem/suchen. aber danke, dass du mir etwas über Umwelt beigebracht hast - neu bei Android https://developer.android.com/reference/android/os/Environment.html – tgkprog

Verwandte Themen