Input- und OutputStreamReader

  • 8 Antworten
  • Letztes Antwortdatum
C

coolz3ro

Neues Mitglied
0
Hallo.

Ich möchte einen String in eine Datei abspeichern und anschließend wieder aus dieser Datei heraus lesen und in einen neuen String speichern.
Problem ist, dass z.B. bei Leerzeichen (im String, der gespeichert wird) der String, der anschließend aus der Datei geladen wird, einen Zeilenumbruch hat! Wie kann ich das beheben?!

Beispiel:

Ich speichere Folgendes ab: "Hallo Welt"
Und nach dem Lesen aus der Datei erhalte ich:
"Hallo
Welt"

Mein Code:

Code:
EditText editText3 = (EditText) dialog.findViewById (R.id.editText1);
String nameIN = editText3.getText().toString();
WriteFile(nameIN);

//Folgendes wird ausgeführt, wenn man auf einen Button klickt:

String output = ReadFile();
EditText editText2 = (EditText) dialog.findViewById (R.id.editText1);
editText2.setText(""+output);

Die zugehörigen Methoden:

Code:
public void WriteFile(String input){ 
          FileOutputStream fileOutputStream = null; 
             OutputStreamWriter outputStreamWriter = null;
             
             try{
                fileOutputStream = openFileOutput("test.txt",MODE_PRIVATE);       
                 outputStreamWriter = new OutputStreamWriter(fileOutputStream); 
                 outputStreamWriter.write(input); 
                 outputStreamWriter.flush(); 
                 outputStreamWriter.close();
             } 
             catch (IOException e) {       
                e.printStackTrace(); 
                } 
        }
        
        public String ReadFile(){ 
            FileInputStream fileInputStream = null; 
            InputStreamReader inputStreamReader = null;
            
            char[] inputBuffer = new char[255]; 
            String output = null;
            
            try{
                fileInputStream = openFileInput("test.txt");       
                inputStreamReader = new InputStreamReader(fileInputStream); 
                inputStreamReader.read(inputBuffer); 
                output = new String(inputBuffer);
                inputStreamReader.close();
                } 
         catch (IOException e) {       
             e.printStackTrace(); 
             } 
            return output; 
        }
 
Code:
FileReader fr = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fr);
String zeile1 = br.readLine();
br.close();
ps. nie Buffer mit fester Länge angeben (char[] inputBuffer = new char[255])
 
Habe das Problem jetzt folgendermaßen lösen wollen, aber leider wird mir im Textfeld immer nur "gggee" ausgegeben. Es wird also offenbar nicht aus der Datei heraus gelesen bzw. auch nicht gespeichert. Brauche daher eure Hilfe.

Beim Klicken auf einen Button in einem Dialog passiert Folgendes:

Code:
                public void onClick(View v) {
                    
                    onClick_btnSave(v, dialog);
                    
                    EditText editText3 = (EditText) dialog.findViewById (R.id.editText1);
                    String nameIN = editText3.getText().toString();
                    WriteFile(nameIN);

                    dialog.dismiss();
                    finish();
                    
                }
Beim nächsten Aufruf wird Folgendes aufgerufen:

Code:
String output = ReadFile();
EditText editText2 = (EditText) dialog.findViewById (R.id.editText1);
Die zugehörigen Methoden:

Code:
    public void WriteFile(String nameIN){ 
             
             try{
                 File file = new File(Environment.getExternalStorageDirectory(), "name.txt");
                 BufferedWriter writer = new BufferedWriter(new FileWriter(file));
                 writer.write(nameIN);
                 writer.flush();
                 writer.close();

             } 
             catch (IOException e) {       
                e.printStackTrace(); 
                } 
        }
        
        public String ReadFile(){ 
             
            String output = "gggee";
            
            try{
               FileReader fr = new FileReader("name.txt");
               BufferedReader br = new BufferedReader(fr);
               output = br.readLine();
               br.close();
                } 
         catch (IOException e) {       
             e.printStackTrace(); 
             } 
            return output; 
        }
 
Hi,
du hast geschrieben
Code:
String output = "gggee";
Naja, damit befiehlst du ihm ja "gggee" auszugeben
Logische Konsequenz -> Ausgabe: gggee

Versuch mal das:
Code:
  String output;
            
            try{
               FileReader fr = new FileReader("name.txt");
               BufferedReader br = new BufferedReader(fr);
               output = br.readLine();
               br.close();
                }

Gruß
 
Hallo Matthias,

danke schonmal für die Antwort. Habe meine Quellcode nach deinem Vorbild geändert. Er sieht jetzt wie Folgt aus:

Code:
public String ReadFile(){ 
             
            String output;
            
            try{
               FileReader fr = new FileReader("name.txt");
               BufferedReader br = new BufferedReader(fr);
               output = br.readLine();
               br.close();
                } 
         catch (IOException e) {       
             e.printStackTrace(); 
             output = null;
             } 
            return output; 
        }

Leider funktioniert es immer noch nicht. Der gespeicherte Name wird beim nächsten Mal nicht ausgegeben.
Außerdem: Zu meinem eigenen Verständnis - warum war es nötig String output = "gggee" zu ändern? Wird der Text nicht von oben nach unten abgearbeitet und dann im try-Block der String output so wie so geändert??

Der ursprüngliche Beitrag von 17:17 Uhr wurde um 17:20 Uhr ergänzt:

An diesem Teil kann es ja nicht liegen, oder?
Hier wird der gespeicherte Text im String output im EditText Feld ausgegeben, je nachdem was im String steht. Ist der String leer, dann wird Enter name ausgegeben, sonst der gespeicherte Name!

Code:
String output = ReadFile();
          EditText editText2 = (EditText) dialog.findViewById (R.id.editText1);
          
          if(output == null){
              editText2.setText("Enter name");
          }
          else{
              editText2.setText("" + output);
          }
 
FileReader fr = new FileReader("name.txt");
das wird vermutlich /name.txt öffnen..
 
Ich verstehe noch nicht, worauf du hinaus willst.
 
noch aktuell.
 
na du schreibst die datei
File file = new File(Environment.getExternalStorageDirectory(), "name.txt")

liest sie aber mit
FileReader fr = new FileReader("name.txt");

warum liest du sie nicht mehr von externalStorage?
 
Zurück
Oben Unten