Textdatei aus Assets lesen

Xym13

Mitglied
Hallo,

ich versuche für meine App eine Textdatei einzulesen. Die App ist ein Spiel und nutzt daher Slick AE (Android Version).

Bin mir nicht ganz sicher, wie ich das machen soll, da meine Main Klasse nicht von der Klasse Activity erbt.

Habe es so versucht:

Data.java
Java:
package de.game;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import android.app.Activity;


public class Data extends Activity {

	public Data() {
		super();
	}
	
	public String readFile(String fileName) {
			try 
			{
				BufferedReader br = new BufferedReader(new FileReader(getResources().getAssets().toString()+fileName));
				
				while(br.readLine() != null) {
					return br.readLine();
				}
			} catch (IOException e) {
				e.printStackTrace();
			} 
			
			return "";
	}
	
	public void saveFile(String lines[]) {
		
	}
	
}

Main.java
Java:
...
public class Main extends BasicGameState {

...

public static Data daten = new Data();

...

public void render(....) {
...
g.drawString(daten.readFile("test.txt"), 0, 0);

.....

Hier bekomme ich eine NullPointerException herraus, da die Datei nicht gefunden wird. Habe aber leider keine Idee wie ich es sonst machen soll.
 

schlingel

Gesperrter Benutzer
Wie kommst du überhaupt auf die Idee, dass die Zeile:

Java:
 BufferedReader br = new BufferedReader(new FileReader(getResources().getAssets().toString()+fileName));

das File findet? getAssets() liefert ein AssetManager-Objekt zurück. Wenn man in die Doku schaut, steht da nichts davon, dass hier ein Verzeichnispfad zurück kommt. Selbst wenn, müsstest du den Pfad ja noch richtig zusammen bauen - was du da nicht machst.

Mit dem AssetManager-Objekt kannst du allerdings direkt das File öffnen. In etwa so:

Java:
 BufferedReader br = new BufferedReader(new InputStreamReader(getRessources().getAssets().open(fileName, AssetManager.ACCESS_STREAMING));

Warum erbt Data von Activity? Das ist ja gar keine UI-Klasse!?
 

Xym13

Mitglied
Wenn ich deine Zeile nehme gibt mir Eclipse diese Fehlermeldung:

The constructor BufferedReader(InputStreamReader) is undefined
 

schlingel

Gesperrter Benutzer
The constructor BufferedReader(InputStreamReader) is undefined
Irgend etwas machst du falsch. (Nicht alles importiert?)

Das Forum verlinkt sogar auf die Doku zu den Klassen und BufferedReader hat einen Konstruktor mit einem Reader als Parameter und InputStreamReader ist eine Unterklasse von Reader. Das funktioniert also!
 

Xym13

Mitglied
Meine Klasse sieht jetzt so aus:
Java:
package de.game;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

import android.app.Activity;
import android.content.ContextWrapper;
import android.content.res.AssetManager;


public class Data extends Activity{
	
	public String readFile(String fileName) {
		
		String s = "Datei konnte nicht eingelesen werden.";
		
			try 
			{
				BufferedReader br = new BufferedReader(new InputStreamReader(getResources().getAssets().open("test.txt", AssetManager.ACCESS_STREAMING)));
				while(br.readLine() != null) {
					s = br.readLine();
				}
			} catch (IOException e) {
				return ""+e;
			} 
			
			return s;
	}

	public void saveFile(String lines[]) {
		
	}
	
}

Habe noch "extends Activity" gelassen, da er sonst nicht die Methode getResources() kennt.

Bekomme aber wenn ich es starte eine NullPointerException in Zeile 20, obwohl eine test.txt im Ordner Assets liegt.
 

schlingel

Gesperrter Benutzer
Habe noch "extends Activity" gelassen, da er sonst nicht die Methode getResources() kennt.
Das ist auf keinen Fall die richtige Vorgehensweise. Du musst deiner Klasse ein Context-Objekt mitgeben. Auf diesem kannst du dann getResources aufrufen.

Möglicherweise löst das auch schon dein Problem, weil dann das Context-Objekt richtig initialisiert wurde.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Lesen / Schreiben einer Textdatei - SD-Karte Android & Cross-Platform Mobile Apps 42
B Android Textdatei laden (klappt nicht) Android & Cross-Platform Mobile Apps 4
S Textdatei in ListView einlesen Tutorial gesucht!? Android & Cross-Platform Mobile Apps 3
S Fehler beim Textdatei einlesen!? Android & Cross-Platform Mobile Apps 7
J Android Textdatei aus dem Internet auslesen und ausgeben Android & Cross-Platform Mobile Apps 2
B Inhalt von StringBuffer in Textdatei speichern? Android & Cross-Platform Mobile Apps 6
B Java ME Textdatei zeilenweise lesen? Android & Cross-Platform Mobile Apps 5
B Textdatei auf Handy erstellen / lesen / schreiben? Android & Cross-Platform Mobile Apps 2
B Android Dateien senden von assets Ordner? Android & Cross-Platform Mobile Apps 7
W .txt File aus dem Speicher des Smartphone lesen Android & Cross-Platform Mobile Apps 15
V Bytes (Wertebereich 0-255) über BLE empfangen,lesen und speichern Android & Cross-Platform Mobile Apps 1
B Android XML File ein lesen und menü erzeugen Android & Cross-Platform Mobile Apps 1
V [Java] und [JavaME] ClientServer StreamConnection . Problem beim lesen / schreiben Android & Cross-Platform Mobile Apps 2
C 2 kleine Probleme (Datei lesen, String durchsuchen) Android & Cross-Platform Mobile Apps 16
R Lesen und schreiben von Daten. Android & Cross-Platform Mobile Apps 2
L SecurityException beim lesen/schreiben eine Datei Android & Cross-Platform Mobile Apps 7
S Variable Anzahl von Bytes aus einer Datei lesen Android & Cross-Platform Mobile Apps 2
thE_29 Vor dem ersten Posten bitte lesen! Android & Cross-Platform Mobile Apps 0

Ähnliche Java Themen

Neue Themen


Oben