Datei Zeilenweise auslesen

  • Antworten:22
Ralf S.
  • Forum-Beiträge: 420

07.06.2010, 09:22:04 via Website

eine Datei Zeilenweise auslesen:

1// try opening the myfilename.txt
2 try {
3 // open the file for reading
4 InputStream in = openFileInput("myfilename.txt");
5 // if file the available for reading
6 if (in) {
7 // prepare the file for reading
8 InputStreamReader input = new InputStreamReader(in);
9 BufferedReader buffreader = new BufferedReader(inputreader);
10 String line;
11 // read every line of the file into the line-variable, on line at the time
12 while (( line = buffreader.readLine())) {
13 // do something with the settings from the file
14 }
15 }
16 // close the file again
17 in.close();
18 } catch (java.io.FileNotFoundException e) {
19 // do something if the myfilename.txt does not exits
20 }

hier gefunden:
http://huuah.com/android-writing-and-reading-files/

Good Day (Mitglied Nr. 19.869)

Antworten
Gelöschter Account
  • Forum-Beiträge: 573

09.08.2010, 14:43:02 via Website

genau sowas habe ich geradde gesucht... thx

Antworten
Ralf S.
  • Forum-Beiträge: 420

09.08.2010, 14:48:27 via Website

...pls.

Good Day (Mitglied Nr. 19.869)

Antworten
Gelöschter Account
  • Forum-Beiträge: 573

09.08.2010, 17:14:47 via Website

also kleine verständnisfrage wie kann ich z.b nur zeile 1 auslesen?

Antworten
Gelöschter Account
  • Forum-Beiträge: 573

10.08.2010, 10:35:14 via App

bei while muss man nämlich != hinzufügen sonst gehts nicht weil es sonst einen error gibt ich will aber die ganze Datei auslesen....

und fürs Verständnis: wie kann ich nur Zeile 1 auslesen

Antworten
Gelöschter Account
  • Forum-Beiträge: 573

11.08.2010, 16:04:24 via Website

1while((readString = buf.readLine()) != null){
2 scores.setText(readString.toString());
3 }

und wenn ich des != null wegtu dann bekomm ich nen error das dass nicht geht und ich muss des hinzufügen wie kann ich nun die ganze textdatei in scores (TextView) zeigen???

Antworten
Gelöschter Account
  • Forum-Beiträge: 573

12.08.2010, 14:25:57 via Website

Bitteeeeee ich fahr jetzt in urlaub dass will ich wenigstens noch schaffen :cold:

ich bekomm nichts angezeigt wegen dem 'null' ne?!

Antworten
Gelöschter Account
  • Forum-Beiträge: 573

12.08.2010, 21:14:53 via Website

ich kann heute nicht schlafen wenn ich dass nicht schaffe

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

12.08.2010, 21:32:41 via Website

Shitbox Applications
ich kann heute nicht schlafen wenn ich dass nicht schaffe

Ersetze einfach
1while (( line = buffreader.readLine())) {
2// do something with the settings from the file
3 }

durch
1line = buffreader.readLine();

und schon liest Du nur die erste Zeile ein.

Sweet Dreams!

Antworten
Gelöschter Account
  • Forum-Beiträge: 573

12.08.2010, 21:47:37 via App

klappt nicht!
1readString = buf.readLine();
2 scores.setText(readString.toString());

— geändert am 12.08.2010, 21:54:27

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

12.08.2010, 21:56:09 via Website

Shitbox Applications
klappt und die ganze Datei?

GoTo Post 1

Oder ersetze:
1String line;
2 // read every line of the file into the line-variable, on line at the time
3 while (( line = buffreader.readLine())) {
4 // do something with the settings from the file
5 }

Durch
1String line, completeFile;
2completeFile="";
3 // read every line of the file into the line-variable, on line at the time
4 while (( line = buffreader.readLine())) completeFile=completeFile+line;

Schon hast Du die vollständige Datei im String completeFile.

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

12.08.2010, 21:59:01 via Website

Shitbox Applications
klappt nicht!
1readString = buf.readLine();
2 scores.setText(readString.toString());

Wieso um alles in der Welt wendest Du die Methode toString() auf einen String an?

Antworten
Gelöschter Account
  • Forum-Beiträge: 573

12.08.2010, 22:00:01 via Website

hab gedacht es geht dann aber funktioniert bei beiden nicht...:(

— geändert am 12.08.2010, 22:02:40

Antworten
Gelöschter Account
  • Forum-Beiträge: 573

12.08.2010, 22:07:20 via Website

1try{
2 File f = new File("data/data/com.game.dblaster/tmp.txt");
3 FileInputStream score = new FileInputStream(f);
4 BufferedReader buf = new BufferedReader(new InputStreamReader(score));
5
6 String readString = new String();
7
8 readString = buf.readLine();
9 scores.setText(readString);
10
11 } catch (FileNotFoundException e) {
12 e.printStackTrace();
13 } catch (IOException e){
14 e.printStackTrace();
15 }
16
17 }
Hier noch die komplette datei
scores ist ein textview

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

12.08.2010, 22:10:23 via Website

Da steht prinzipiell nichts anstössiges drin. Was für eine Fehlermeldung bekommst Du denn?

Antworten
Gelöschter Account
  • Forum-Beiträge: 573

12.08.2010, 22:22:33 via App

so insgesamt nix ich poste gleich die logcat mal schauen was die so ausspuckt

Antworten
Gelöschter Account
  • Forum-Beiträge: 573

12.08.2010, 22:39:24 via Website

ahaa
ich habe den falschen pfad angegeben :grin: ( package name heute geändert)...
etz nen fc...:(
1package com.shitbox.dblaster;
2
3import java.io.BufferedReader;
4import java.io.File;
5import java.io.FileInputStream;
6import java.io.FileNotFoundException;
7import java.io.IOException;
8import java.io.InputStreamReader;
9
10import android.app.Activity;
11import android.os.Bundle;
12import android.util.Log;
13import android.widget.TextView;
14
15public class score extends Activity {
16 TextView scores;
17
18 @Override
19 protected void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 setContentView(R.layout.score);
22
23 scores = (TextView) findViewById(R.id.scores);
24 try{
25 File f = new File("data/data/com.shitbox.dblaster/tmp.txt");
26 FileInputStream score = new FileInputStream(f);
27 BufferedReader buf = new BufferedReader(new InputStreamReader(score));
28
29 String readString = new String();
30
31 readString = buf.readLine();
32 scores.setText(readString);
33
34 } catch (FileNotFoundException e) {
35 e.printStackTrace();
36 } catch (IOException e){
37 e.printStackTrace();
38 }
39
40 }
41}
logcat:
08-12 22:36:09.710: ERROR/AndroidRuntime(4589): Caused by: java.lang.NullPointerException
08-12 22:36:09.710: ERROR/AndroidRuntime(4589): at com.shitbox.dblaster.score.onCreate(score.java:32)
08-12 22:36:09.710: ERROR/AndroidRuntime(4589): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069)
08-12 22:36:09.710: ERROR/AndroidRuntime(4589): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751)
08-12 22:36:09.710: ERROR/AndroidRuntime(4589): ... 11 more

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

13.08.2010, 10:35:55 via Website

Das ist eine NullPointerException. D.h. in der Zeile ist enweder Deine Variable "scores" noch nicht initialisiert, oder die Variable "readString" ist null.

scores erstelltst Du weiter ober über findViewById, das sollte soweit in Ordnung sein. Also ist wahrscheinlich "readString" null.

Das liegt wahrscheinlich an dieser Zeile:
1File f = new File("data/data/com.shitbox.dblaster/tmp.txt");

Du möchtest ja eine bestehende Datei auslesen. Mit der Zeile oben erstellst Du aber soweit ich weis eine neue Datei. Die ist dann natürlich leer, und buf.readLine() gibt Dir korrekterweise null zurück.

Lass diese Zeile einfach weg, und ändere die Zeile danach entsprechend um. Wenn Du magst bau noch ein paar Log outputs ein, dann siehst Du eher woran es liegt. Das ganze sollte dann so aussehen:

1FileInputStream fis = openFileInput("data/data/com.shitbox.dblaster/tmp.txt");
2 InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
3
4
5 //Lass Dir im Log die Größe der Datei ausgeben. Dann siehst Du ob diese leer ist oder nicht
6 Log.i("GAME", "Length of Higscore File: "+String.valueOf(fis.available()+1));
7
8 BufferedReader reader = new BufferedReader(isr);
9
10 String readString = new String();
11
12 readString = buf.readLine();
13 Log.i("GAME", "Highscore String: "+readString);
14 scores.setText(readString);
15
16 isr.close();
17 fis.close();

Antworten
Gelöschter Account
  • Forum-Beiträge: 573

20.08.2010, 15:22:56 via App

Shitbox Applications
ahaa
ich habe den falschen pfad angegeben :grin: ( package name heute geändert)...
etz nen fc...:(
1package com.shitbox.dblaster;
2
3import java.io.BufferedReader;
4import java.io.File;
5import java.io.FileInputStream;
6import java.io.FileNotFoundException;
7import java.io.IOException;
8import java.io.InputStreamReader;
9
10import android.app.Activity;
11import android.os.Bundle;
12import android.util.Log;
13import android.widget.TextView;
14
15public class score extends Activity {
16 TextView scores;
17
18 @Override
19 protected void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 setContentView(R.layout.score);
22
23 scores = (TextView) findViewById(R.id.scores);
24 try{
25 File f = new File("data/data/com.shitbox.dblaster/tmp.txt");
26 FileInputStream score = new FileInputStream(f);
27 BufferedReader buf = new BufferedReader(new InputStreamReader(score));
28
29 String readString = new String();
30
31 readString = buf.readLine();
32 scores.setText(readString);
33
34 } catch (FileNotFoundException e) {
35 e.printStackTrace();
36 } catch (IOException e){
37 e.printStackTrace();
38 }
39
40 }
41}
logcat:
08-12 22:36:09.710: ERROR/AndroidRuntime(4589): Caused by: java.lang.NullPointerException
08-12 22:36:09.710: ERROR/AndroidRuntime(4589): at com.shitbox.dblaster.score.onCreate(score.java:32)
08-12 22:36:09.710: ERROR/AndroidRuntime(4589): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069)
08-12 22:36:09.710: ERROR/AndroidRuntime(4589): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751)
08-12 22:36:09.710: ERROR/AndroidRuntime(4589): ... 11 more

ohne das 'score.setText(readString)'
bekomme ich keinen fc... allerdings wird auch nichts angezeigt is ja klaar

thx

bin im Urlaub also kann ich selten nachschauen

LG aus Frankreich

Antworten
wolfgang beppler
  • Forum-Beiträge: 8

25.09.2010, 22:51:43 via Website

hi,
wie krieg ich die datei die ich auslsen will in den emulator ? und wo liegt die denn ?
ich hab mir eine datei auf dem handy erstellt als "/sdcard/my.txt" bekomme aber immer pozess unerwartet beendet
hab ich da keine rechte oder was mach ich falsch, ich arbeite nach obigem beispielcode

gruss und dank

w

Antworten
Manuel Wildauer
  • Forum-Beiträge: 30

08.11.2010, 20:53:03 via Website

Will meinen Senf auch dazu geben.

1public class MainActivity extends Activity {
2 private static Vector strings = new Vector();
3 private static InputStream fr;
4
5 public void onCreate(){
6 InputStream ins = getResources().openRawResource(R.raw.strings);
7 ReadFile(ins);
8 }
9
10 private static void ReadFile(InputStream stream){
11 fr = stream;
12 Scanner sc = new Scanner(fr);
13 while(sc.hasNext()){
14 strings.add(sc.nextLine());
15 }
16 }
17}

Habe ich bei einer App, die aus einer txt-Datei alle Zeilen in den Vector schreibt mit dem ich dann weiter Arbeite (Zufällige Zeile usw)

— geändert am 08.11.2010, 20:53:29

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

13.12.2010, 09:47:48 via Website

Vector macht wenig Sinn hier da er synchronized ist -> lieber ArrayList / List benutzen.

Streams bitte mittels close schließen in einem try/finally Block!
Methoden werden in Java klein geschrieben: readFile .....

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Stefano L.
  • Forum-Beiträge: 3

30.11.2011, 19:04:25 via Website

Niemals Streams im finally block schließen. Vgl. Effective Java Programming von Bloch

Antworten