Textdatei erstellen/speichern/auslesen/editieren

  • 8 Antworten
  • Letztes Antwortdatum
A

adriax

Ambitioniertes Mitglied
0
Hallo Leute,

also irgendwie finde ich nicht das richtige was ich suche hier im Forum,...
unzwar will ich per APP eine Textdatei erstellen, welche ich dann auch durch die selbe APP wieder auslesen und editieren will.
unzwar habe ich drei übergabe werte die in die .txt müssen.

zudem habe ich noch eine frage bzüglich verschlüsselung. gibt es möglichkeiten diesen Text auch verschlüsselt in die .txt zu schreiben und dann entschlüsselt wieder an die app zu übergeben?
 
also wurde ich das schreiben so lösen?

Code:
			//Speichern
		
			String filename = "save.txt";
			FileOutputStream outputStream;

			try {
			  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
			  //outputStream.write(Main.Gold.toString().getBytes());
			  //outputStream.write(MapActivity.lvl.toString().getBytes());
			  //outputStream.write(Game_started.levelcleared.toString().getBytes());
			  outputStream.write(50);
			  outputStream.write(100);
			  outputStream.write(2);
			  outputStream.close();
			} catch (Exception e) {
			  e.printStackTrace();
			}
			
			//SPeichern

und das lesen so
Code:
		String filename = "save.txt";
		FileInputStream inputStream;

		try {
			inputStream = openFileInput(filename);
			Main.Gold = inputStream.read();
			MapActivity.lvl = inputStream.read();
			Game_started.levelcleared = inputStream.read();
			inputStream.close();
		} catch (Exception e) {
		  e.printStackTrace();
		}

nur läuft die app dann in nen fehler...
runtime expception
 
Lesen tust du zB über einen Buffered Reader:

Code:
AssetManager am = context.getAssets();
InputStream is = am.open("maps/wp_main.txt");       
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String lineHead = br.readLine();

Hoffe das Beispiel hilft dir, dass ist jetzt speziell auf das Lesen einer Datei im Assets-Ordner ausgelegt, den AssetManager benötigst du nicht wenn du etwa aus der Speicherkarte ausliest.

Mfg
 
aber wo speichert er die txt datei mit
Code:
//Speichern
		
			String filename = "save.txt";
			FileOutputStream outputStream;

			try {
			  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
			  //outputStream.write(Main.Gold.toString().getBytes());
			  //outputStream.write(MapActivity.lvl.toString().getBytes());
			  //outputStream.write(Game_started.levelcleared.toString().getBytes());
			  outputStream.write(50);
			  outputStream.write(100);
			  outputStream.write(2);
			  outputStream.close();
			} catch (Exception e) {
			  e.printStackTrace();
			}
			
			//SPeichern


hin??
weil da wird ja nirgend ein path hinterlegt :/, weil ich muss sie dann ja beim auslesen wieder irgentwo finden...:(
 
also wenn ich die .txt in den assets ordner speichern möchte und auch von dort auslesen, wie stelle ich das am geschickstesten an??

hätte jetzt ab sowas in der art gedacht
speichern
Code:
			String filename = "savegame.txt";
			AssetManager am = this.getAssets();

			try {
				FileOutputStream fosWriter = new FileOutputStream(new File(am.open("save/savegame.txt")));

				fosWriter.write(Main.Gold.toString().getBytes());
				fosWriter.write(MapActivity.lvl.toString().getBytes());
				fosWriter.write(Game_started.levelcleared.toString().getBytes());
				fosWriter.close();
			} catch (Exception e) {
				e.printStackTrace();
			}

und lesen
Code:
		AssetManager am = this.getAssets();
		InputStream is;
		try {
			is = am.open("save/savegame.txt");
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			Main.Gold = Integer.parseInt(br.readLine());
			MapActivity.lvl = Integer.parseInt(br.readLine());
			Game_started.levelcleared = Integer.parseInt(br.readLine());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

ich weiß das da so nicht funktioniert^^ is nur ne idee gewesen^^

[EDIT]
Ist es überhaupt möglich eine Datei im Assets ordner zu verändern??
Weil ich erstelle sie ja und überspeichere und lese sie auch...
 
Zuletzt bearbeitet:
Also, die Sache ist die, du kannst nur aus dem Assets-ordner auslesen und nichts darin speichern, da er ein Teil deiner App ist und die .apk nicht verändert werden kann.
Wenn du nur 3 werte schreiben & auslesen willst, bietet sich shadered Preference an. Da kannst du einfache Name-Wertpaare speichern.

Wenn du allerdings wirklich eine Textdatei benötigst, musst du diese in einem anderen Ordner, zB. auf der SD-Karte speichern (wobei das natürlich zum Problem wird wenn der User keine hat).

Zu diesem Thema gibt es viel im Internet, schau zB. mal hier: Reading & Writing a file to SD Card .

Ich hoffe du kommst jetzt weiter,
Mfg
 
die beispiel seite die du mir geschickt hast ist super, aber wie kriege es hin mehrere zeilen in die .txt zu kloppen?

hätte jetzt gedacht
Code:
try {
				File myFile = new File("/sdcard/savegame.txt");
				myFile.createNewFile();
				FileOutputStream fOut = new FileOutputStream(myFile);
				OutputStreamWriter myOutWriter = 
										new OutputStreamWriter(fOut);
				myOutWriter.append(Main.Gold.toString());
				myOutWriter.append(MapActivity.lvl.toString());
				myOutWriter.append(Game_started.levelcleared.toString());
				myOutWriter.append(Main.datum.toString());
				myOutWriter.append(Choose.yourPoints.toString());
				myOutWriter.append(Choose.oppPoints.toString());
				myOutWriter.close();
				fOut.close();
				Toast.makeText(getBaseContext(),
						"Spielstand wurde gespeichert!",
						Toast.LENGTH_SHORT).show();
			} catch (Exception e) {
				Toast.makeText(getBaseContext(), e.getMessage(),
						Toast.LENGTH_SHORT).show();
			}

aber hier mäckert er rum wegen mehreren "append"

zudem sollen diese dann beim auslesen wieder in die jeweiligen Variablen.

Der ursprüngliche Beitrag von 21:41 Uhr wurde um 22:17 Uhr ergänzt:

ok hat sich erledigt^^ habs gelöst^^
falls noch irgentwen der lösungsweg intersiert hier mein code

read
Code:
		try {
			File myFile = new File("/sdcard/savegame.txt");
			FileInputStream fIn = new FileInputStream(myFile);
			BufferedReader myReader = new BufferedReader(
					new InputStreamReader(fIn));
			String aDataRow = "";
			String aBuffer = "";
			/*while ((aDataRow = myReader.readLine()) != null) {
				aBuffer += aDataRow + "\n";
			}*/
			for(int i= 0; i<6; i++){
				if(i == 0){
					Main.Gold = Integer.parseInt(myReader.readLine());
				}
				if(i == 1){
					MapActivity.lvl = Integer.parseInt(myReader.readLine());
				}
				if(i == 2){
					Game_started.levelcleared = Integer.parseInt(myReader.readLine());
				}
				if(i == 3){
					bufferDatum = myReader.readLine();
				}
				if(i == 4){
					Choose.yourPoints = Integer.parseInt(myReader.readLine());
				}
				if(i == 5){
					Choose.oppPoints = Integer.parseInt(myReader.readLine());
				}
			}
			myReader.close();
			Toast.makeText(getBaseContext(),
					"Ladevorgang war efolgreich!",
					//"Ladevorgang war efolgreich!"+"\nGold:"+Main.Gold +"\nLevel:"+MapActivity.lvl+"\nStatus:"+Game_started.levelcleared+"\n Datum"+bufferDatum+"\nYPoints:"+Choose.yourPoints+"\nOPoints:"+Choose.oppPoints,
					Toast.LENGTH_LONG).show();
			
		} catch (Exception e) {
			Toast.makeText(getBaseContext(), e.getMessage(),
					Toast.LENGTH_SHORT).show();
		}

write
Code:
			try {
				File myFile = new File("/sdcard/savegame.txt");
				myFile.createNewFile();
				FileOutputStream fOut = new FileOutputStream(myFile);
				OutputStreamWriter myOutWriter = 
										new OutputStreamWriter(fOut);
				myOutWriter.append(Main.Gold.toString() + "\n");
				myOutWriter.append(MapActivity.lvl.toString() + "\n");
				myOutWriter.append(Game_started.levelcleared.toString() + "\n");
				myOutWriter.append(Main.datum + "\n");
				myOutWriter.append(Choose.yourPoints.toString() + "\n");
				myOutWriter.append(Choose.oppPoints.toString() + "\n");
				myOutWriter.close();
				fOut.close();
				Toast.makeText(getBaseContext(),
						"Spielstand wurde gespeichert!",
						Toast.LENGTH_SHORT).show();
			} catch (Exception e) {
				Toast.makeText(getBaseContext(), e.getMessage(),
						Toast.LENGTH_SHORT).show();
			}
 
Zuletzt bearbeitet:
sorry, sollte hier gar nicht hin :s
 
Zurück
Oben Unten