In .txt file schreiben aber unten anhängen

Hayes

Mitglied
Hallo zusammen

So ich bin wieder einen Schritt weitergekommen bei meinem Tool, nun gehts ans FileHandling. Das funktioniert soweit auch alles, sofern ich nur etwas reinschreibe jedoch beim 2. mal überschreibt er mir immer das Alte (Welches schon drinstand). Ich hoffe ihr könnt mir da weiterhelfen :)
Nachfolgen noch mein Code mit dem ich ins File schreibe

Code:
FileOutputStream out;
PrintStream p;
try{
 out = new FileOutputStream("data/berichte.txt");
 p = new PrintStream( out );
 p.println(date + "\n");
 p.println(omni + "\n");
 p.println(pluenderung + "\n");
 p.close();
}
catch (Exception o){
 JOptionPane.showMessageDialog(null, "Konnte Angriffsbericht nicht speichern", "Error!",JOptionPane.OK_CANCEL_OPTION);
}
JOptionPane.showMessageDialog(null, "Angriffsbericht erfolgreich gespeichert", "SUCCessfull",JOptionPane.OK_CANCEL_OPTION);

MfG
Hayes
 
Schau dir mal das RandomAccessFile an. Das liefert die Funktionen die du brauchst (seek(), write())
 
Zuletzt bearbeitet:
Hallo!

siehe:

Code:
import java.io.FileWriter;
import java.io.IOException;

public class FileAppender {

	public static void main(String[] args) {
		try {
			FileWriter fw = new FileWriter("c:/test.fil", true); //Append =
																 // true
			fw.write(System.currentTimeMillis() + "\r\n");
			fw.flush();
			fw.close();

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Gruß Tom
 
Hallo

Ich hab wieder ein Problem ;) Schreibs jetzt einfach mal hier rein dass ich nicht für jedes meiner Probleme einen neuen Thread eröffnen muss.

Und zwar gehts jetzt ums auslesen aus der Datei:

Code:
String line;
int anzRows = 0;
int dimensionOne = 0;
int dimensionTwo = 0;
//--------------------------------
//Alle Daten aus dem File auslesen
//---------------------------------
try{
     File dieDatei = new File("data/berichte.dat"); 
     BufferedReader file_in = new BufferedReader(new InputStreamReader(new       FileInputStream(dieDatei))); 
    while( (line=file_in.readLine()) != null){
	anzRows++;                                //Ermitteln der anzahl Reihen in der Datei
    }
    StringTokenizer stData = new StringTokenizer(line, "\n");
    String[][] readData = new String[anzRows][];
    while((line=file_in.readLine()) != null){
           while( stData.hasMoreTokens() ){
	readData[dimensionOne][dimensionTwo] = stData.nextToken();
	dimensionTwo++;
	if(readData[dimensionOne][dimensionTwo] == "--"){
	    dimensionOne++;
	}
          }
   }
  
   file_in.close();
}
catch (IOException i ){
          JOptionPane.showMessageDialog(null, "Konnte Datei nicht schreiben/Lesen","Error!",JOptionPane.OK_CANCEL_OPTION);
}
catch(NullPointerException nu){
          System.out.println(nu);
}

Mein Problem ist nun ich bekomm immer eine NullPointerException und zwar auf dieser Zeile :
StringTokenizer stData = new StringTokenizer(line, "\n");
Hab schon alles versucht aber komme nicht mehr weiter :(

MfG
Hayes

€: Hm... tut mir leid wenns nicht so leserlich ist aber das Codetag verschiebt meinen ganzen Code :(
 
Zuletzt bearbeitet:
Original geschrieben von Hayes
Code:
StringTokenizer stData = new StringTokenizer(line, "\n");
String[][] readData = new String[anzRows][];
while((line=file_in.readLine()) != null){
    while( stData.hasMoreTokens() ){
        readData[dimensionOne][dimensionTwo] = stData.nextToken(); 
        dimensionTwo++;
        if(readData[dimensionOne][dimensionTwo] == "--"){
            dimensionOne++;
        }
    }
}
Die Zeile StringTokenizer stData = new StringTokenizer(line, "\n"); muss hier in die erste while Schleife rein. ;)
 
Du liest das File ein und durchläufst es ganz um die Zeilen zu zählen. Wenn du es danach nocheimal von Vorne durchgehen willst, müsstest du die Datei neu öffnen. Einfacher wäre allerdings statt dem String-Array einen Vektor zu nehmen (kann sich dynamisch ändern) und ohne die Zeilenzahl vorher zu bestimmen deine Operationen durchführen und gleich den Inhalt bearbeiten.
 
Hm... gibt es 2 Dimensinale Vektoren?

Ich habe in meiner Textdatei so kleine "Pakete" mit meinen Daten drin:

Code:
//Das hier wäre Paket 1:
Datum:  12:04 27-09-2004  
omni 96054
 
_max. Kapazität: 2240
874 Eisen
376 Titan
193 Öl
96 Uran
118 Gold
insgesamt geplündert: 1657
--
//Das hier wäre Paket 2:
Datum:  12:04 28-09-2004  
omni 96051
 
_max. Kapazität: 2240
874 Eisen
320 Titan
193 Öl
96 Uran
118 Gold
insgesamt geplündert: 1601
--

Bis zum -- ist immer ein Paket, nun hab ich mir folgendes überlegt: In der ersten Dimension des Arrays steht immer die Nummer des Paketes und in der zweiten Dimension die Daten zum dazugehörigen Paket. Also:

readData[0][0] wäre demfalls die erste Zeile des ersten Paketes, in diesem Fall : Datum: 12:04 27-09-2004
readData[0][1] entspräche der zweiten Zeile des ersten Paketes : omni 96054
usw.
genauso verhaltet es sich mit dem zweiten Paket:
readData[1][0] entspräche der ersten Zeile im zweiten Paket :Datum: 12:04 28-09-2004
usw.

Würde das auch mit Vektoren gehen? oder hättet ihr eine andere Idee wie ich das lösen könnte?

MfG
Hayes
 
Zuletzt bearbeitet:
Du kannst in einem Vector einen weiteren Vector speichern.

Vector v1=new Vector(),
Vector v2=new Vector();
v1.add(v2);

da alle Objekte in einem Vektor gespeichert werden können.
Zum Auslesen musst du blos casten:

Vector v=(Vector)v1.elementAt(0);
 
Zurück