FileOutputStream und BufferReader

  • Antworten:13
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 75

30.06.2013, 17:27:04 via Website

Hallo ich versuche Gerade den Output einer TextView in eine weitere TextView zuschreiben.
Diese TextView sollte so ausehen
1Bisherige Noten:
21.0
31.0
41.0
5[...]
Das diese TextView scrollable ist funktioniert schon. Nur steht da beim App Start etwas wirres drin was ich nicht verstehe woher das kommt.
[code]
android.widget.TextView(41864b60 VFED.VCL.... usw
[code]

Mein Code
1final static String FILENAME = "marks.txt";
2
3private void loadTestfromFile()
4 {
5 File f = new File(getFilesDir(),FILENAME);
6 try {
7 BufferedReader br = new BufferedReader(new FileReader(f));
8 String line;
9 try {
10 while ((line = br.readLine()) != null)
11 {
12 mNotenHistory.setText(line+"\n"+mNotenHistory.getText());
13 }
14 br.close();
15 } catch (IOException e) {
16 e.printStackTrace();
17 }
18
19
20 } catch (FileNotFoundException e) {
21 e.printStackTrace();
22 }
23 }
24
25[..]
26public void onClick(View view)
27 {
28 if (view.getId()==R.id.btn1calc)
29 {
30 [...]
31 mNotenHistory.setText(mNotenHistory.getText() + "\n" + string_note);
32 String noten_history_string = String.valueOf(mNotenHistory);
33 try {
34 FileOutputStream fo = openFileOutput(FILENAME, Context.MODE_APPEND);
35 fo.write(noten_history_string.getBytes());
36 fo.write("\n".getBytes());
37
38 } catch (FileNotFoundException e) {
39 e.printStackTrace();
40 } catch (IOException e) {
41 e.printStackTrace();
42 }
43}

— geändert am 30.06.2013, 17:28:16

Antworten
  • Forum-Beiträge: 75

30.06.2013, 20:15:21 via Website

Bin immer noch nicht weiter, kA woher dieser Text kommt. Aber ich habe nun einmal gefühlte 5min an das Ende gescrollt und festgestellt das er zumindest solange die App offen ist oder im Hintergrund läuft die Noten in die View rein schreibt. Kille ich die App sind Sie aber nicht wieder da.

Also gibt es ein Problem beim wegschreiben was ich auch sehe wenn ich mir die Datei anschaue, dort steht nur der Mist drin.

— geändert am 30.06.2013, 20:15:47

Antworten
  • Forum-Beiträge: 75

01.07.2013, 17:05:16 via Website

Ich versuche aktuell zum Testen, um nicht jedes mal das File manuell zu löschen etc, den Inhalt per Reset Button zu löschen.

1if (view.getId()==R.id.btn2reset)
2 {
3
4 mMypoints.setText(null);
5 mErgebnis.setText(null);
6 setImage(5);
7 FileOutputStream writer = new FileOutputStream("file.txt");
8 writer.write(0);
9 writer.close();
Im Prinzip genau das selbe nur das ich eben nichts rein schreibe. (Try Catch ist natürlich noch überall drum rum.)
Will aber auch nicht so recht =/

— geändert am 01.07.2013, 17:43:50

Antworten
  • Forum-Beiträge: 1.793

01.07.2013, 17:55:55 via Website

1String noten_history_string = String.valueOf(mNotenHistory);
Ist mNotenHistory nicht dein EditText? Dann sollte es wohl eher
1String noten_history_string = String.valueOf(mNotenHistory.getText());
heißen.

Gruß

PS: Achja, woher hast du das mit den .getBytes() ?

— geändert am 01.07.2013, 17:56:49

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
  • Forum-Beiträge: 75

01.07.2013, 22:33:24 via Website

impjor
1String noten_history_string = String.valueOf(mNotenHistory);
Ist mNotenHistory nicht dein EditText? Dann sollte es wohl eher
1String noten_history_string = String.valueOf(mNotenHistory.getText());
heißen.

Gruß

PS: Achja, woher hast du das mit den .getBytes() ?

Nein mNotenHistory ist die TextView.

Das mit den getBytes, ehrlich gesagt keine Ahnung :D Habe mal im Kopf gehabt von c# das man nur Bytes schreiben kann und keine Datentypen direkt.
Da es das gab habe ich es benutzt :D.

Antworten
  • Forum-Beiträge: 75

02.07.2013, 15:50:52 via Website

Ja .getText() habe ich mittlerweile nun steht auch kein "Mist" mehr drin.
Aktuell funktioniert es soweit in der Art. (Datei davor komplett gelöscht, so dass es neu angelegt wird)
Wenn ich in die TextView eine
16.0
21.0
schreibe wird es korrekt angezeigt. Ich schließe/kille die App komplett und öffne das File manuell, dann steht dort.
1\n
21.0
3\n
41.0
56.0
Beim wieder öffnen der App wird mir nur eine
16.0
angezeigt.

Meine Methode um das File zu lesen beim App start.
1private void loadTextfromFile()
2 {
3 File f = new File(getFilesDir(),FILENAME);
4 try {
5 BufferedReader br = new BufferedReader(new FileReader(f));
6 String line;
7 try {
8 while ((line = br.readLine()) != null)
9 {
10 mNotenHistory.setText("\n"+line);
11 }
12 br.close();
13 } catch (IOException e) {
14 e.printStackTrace();
15 }
16 } catch (FileNotFoundException e) {
17 e.printStackTrace();
18 }
19 }

— geändert am 02.07.2013, 16:02:12

Antworten
  • Forum-Beiträge: 1.793

02.07.2013, 16:03:04 via App

Du rufst zwar setText("/n" + line); in einer Schleife auf, aber bei jedem setText geht der Inhalt des TextView verloren. So sollte es heißen:
setText(.getText()+line+"/n");

Gruß
Edit: Hast du das .getBytes() noch drin? Das solltest du entfernen.

— geändert am 02.07.2013, 16:04:46

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
  • Forum-Beiträge: 75

02.07.2013, 16:38:54 via Website

impjor
Du rufst zwar setText("/n" + line); in einer Schleife auf, aber bei jedem setText geht der Inhalt des TextView verloren. So sollte es heißen:
setText(.getText()+line+"/n");
.getText() von was? So geht das nicht wie du schreibst.
Wenn du im ersten Post siehst hatte ich das auch mal so.
1mNotenHistory.setText(line+"\n"+mNotenHistory.getText());
Das produziert mir beim wieder öffnen der App irgend wie die Einträge xMale doppelt.



impjor

Edit: Hast du das .getBytes() noch drin? Das solltest du entfernen.
Ja was sollte da sonst stehen? Eine String Variable kann man nicht schreiben.

Danke Gruß

— geändert am 02.07.2013, 16:39:40

Antworten
  • Forum-Beiträge: 75

02.07.2013, 17:33:13 via Website

Mac Systems
Aus Performance sicht sollte man einen StringBuilder benutzten und dann am ende verarbeiten

Danke werde ich mal lesen, aber wäre schon froh wenn es auch so funktionieren würde :D

Antworten
  • Forum-Beiträge: 75

02.07.2013, 21:41:07 via Website

Fehler gefunden....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
:*)

1mNotenHistory.setText(string_note + "\n" + mNotenHistory.getText().toString());
2fo.write(string_note.getBytes());
3//fo.write(mNotenHistory.getBytes()); -> Brainlagg

Antworten
  • Forum-Beiträge: 206

03.07.2013, 16:00:40 via App

Also ich lese Dateien immer mit:

1File f = deineFile;
2TextView tv = hierSollsRein;
3
4FileInputStream fIn = new FileInputStream(f);
5 InputStreamReader inR = new InputStreamReader(fIn);
6 BufferedReader bR = new BufferedReader(inR);
7
8 String row = "";
9 String buffer = "";
10
11 while ((row = bR.readLine()) != null) {
12 buffer += row + "\n";
13 }
14
15 bR.close();
16 inR.close();
17 fIn.close();
18
19//am Ende kommt immer noch ein überflüssiges \n hinzu, deshalb schneide ich das weg:
20
21buffer = buffer.substring(0, buffer.length() - 2);
22
23//zeige den aus der Datei gelesenen Text an:
24
25tv.setText(buffer);

Und in eine Datei schreibe ich mit:

1File f = deineFile;
2TextView tv = hierIstDeinText;
3
4FileOutputStream fOut = new FileOutputStream (f);
5OutputStreamWriter outW = new OutputStreamWriter (fOut);
6BufferedWriter bW = new BufferedWriter (outW);
7
8bW.append (String.valueOf(tv.getText));
9
10bW.close ();
11outW.close ();
12fOut.close ();

Hoffe, ich konnte helfen :)

Qpa

Antworten

Empfohlene Artikel