textdatein schreiben und auslesen

C

coolerouny

morgen!

ich wollte fragen ob mir jemand helfen kann, wie ich eine textdatei erstellen kann und darin variablen oder text speichern kann; und zwar in einelnen zeilen

und natürlich dann auch wieder auslesen =)

ps:
sollte für ein savegame werden,... also was gibts da eigentlich für welche dateitypen?

mfg
coolerouny
 
Die Dateitypen spielen eigentlich keine große rolle ob du jetzt in einer datei.dat oder datei.txt speicherst ist relativ egal. Java packt dat schon.
Gruß Steff
 
Sie dir den
FileOutputStream an für "formatierte" Text Ausgabe
hier kannst du mittels PrintWirter Strings in das File schreiben.

DataOutputStream für "unformatierte" Ausgabe
hier kannst du verschiedene Datentypen schreiben,
bzw mit dem DataInputStream wieder lesen

ObjectOutputStream um ganze Objecte in ein File zu speichern
 
Hallo!

Hie rmal ein kleines Beispiel für Zeilenbasierte Eingabe/Ausgabe in Dateien.
Code:
/*
 * Created on 17.05.2005@16:04:32 by Darimont
 *
 * TODO Licence info
 */
package de.tutorials;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

/**
 * @author Darimont
 * 
 * TODO Explain me
 */
public class FileReadWriteExample {

	public static void main(String[] args) throws Exception {

		//Zeilenweise in Textdatei schreiben
		File file = new File("c:/example.txt");
		BufferedWriter bw = new BufferedWriter(new FileWriter(file));

		String[] text = { "User", "helfen", "Usern" };
		for (int i = 0; i < text.length; i++) {
			bw.write(text[i]);
			bw.newLine();
		}

		bw.flush();
		bw.close();

		//Zeilenweise auslesen
		BufferedReader br = new BufferedReader(new FileReader(file));

		String line;

		while ((line = br.readLine()) != null) {
			System.out.println(line);
		}

		br.close();

	}
}

Wenn du binäre Datenspeichern willst solltest du FileOutputStream in ein BufferedOutputStream Kapseln und um diesen vielleicht noch einen DataOutputStream legen. Mit dem kannst du dann bequem ints/longs/floats/doubles/chars... über die entsprechenden Methoden absetzen.

Anosnsten könntest du Vaporizers Tipp mit dem ObjectOutpuStream / ObjectInputStream benutzen um Serialisierbare Objekte (= implementieren java.io.Serializable / Externalizable) zu Serialisieren.

Gruß Tom
 
super danke!

funktioniert super...

aber wie kann ich, wenn zb schon eine txt datei da ist, nur die zweite zeile auslesen oder nur in die zweite zeile was schreiben?

mfg
coolerouny
 
morgen!

also ich habs jetzt selber gelöst; aber irgendwie komisch

er ließt zuerst die originaldatei und merkt sich alles
dann schreibt er es wieder und die zeile die man geändert haben will schreibt er anders
und zum schluss gibt er die aus (kann man aber eine beliebige ausgeben)
der rest steht dann in der txt datei noch normal drinnen

Code:
/*also in der datei steht jetzt
 *
 *hallo     ... 1. zeile
 *wie
 *geht
 *es
 *dir
 *?
 *
 */

import java.io.*;

public class myFileReadWriteExample {

	public static void main(String[] args) throws Exception {
		File file = new File("example.txt");
		
		//mal auslesen und merken was drinnen war
		BufferedReader br1 = new BufferedReader(new FileReader(file));
		String line1;
		String zeile[] = new String [100]; //müsste man halt wissen wieviele
		//zeilen die textdatei hat...
		int j=0;
		
		while ((line1 = br1.readLine()) != null) {
			zeile[j] = line1; //gemerkt
			j++;			
		}		

		br1.close();
		
		//Zeilenweise in Textdatei schreiben
		BufferedWriter bw = new BufferedWriter(new FileWriter(file));

		int writeZeile = 2;
		
		for (int i = 0; i < j; i++) {
			if (i!=writeZeile)
				bw.write(zeile[i]);
			else
				bw.write("umgeschrieben");
			bw.newLine();
		}
		
		bw.flush();
		bw.close();


		//Zeilenweise auslesen
		BufferedReader br = new BufferedReader(new FileReader(file));

		String line;
		int nLine = 2; //das heißt die 3. line
		int n=0;

		while ((line = br.readLine()) != null) {
			if (n==nLine)
				System.out.println(line);
			n++;
		}		

		br.close();
	}
}

aber gibt es da keinen leichteren weg?

mfg
coolerouny
 
Ich mache dir mal nen anderen Vorschlag:

warum erstellst du nicht eine Klasse SaveGame (oder so ähnlich) die muß Serializeable sein.
Dort packst du alles an Atributen rein, die Du brachst. Und zum Schluß nimmst du den ObjectOutputStream/InputStream und schreibst ein ganzes Objekt (von SaveGame) in eine Datei, genauso kannst du sie dann auch wieder auslesen.
Ich denke das ist keine schlechte Idee, dann umgehst du das zeilenweise Auslesen und Ändern.
 
morgen!

aber wenn ich die datei wieder auslese bekomm ich doch nur text oder?

wie geht das, dass nacher die variablen wieder so belegt sind?

mfg
coolerouny
 
Zurück