in file immer 2. zeile überschreiben

  • Themenstarter Themenstarter BL
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

BL

Gast
hi,

würde gerne in einem file immer die 2. zeile mit dem was in der variable "var1" steht überschreiben.
Bisher hab ich den Code einfach so :
Code:
				BufferedWriter output = null;
				try {
					output = new BufferedWriter( new OutputStreamWriter(new FileOutputStream("./test.txt", true) ) );
				} catch (FileNotFoundException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				try {
					output.write(var1);
					output.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

wie mach ich das jetzt? so schreibt er es ja immer ab dem anfang rein..
lg BL
 
Achja nochwas: die erste Zeile darf micht angerührt werden. da steht eine info drin die so erhalten bleiben soll.
 
Hmm ich glaube so einfach ist das nicht das wiederspricht auch der Strombasierenden ein und Ausgabe. Du musst die also die position im Stream suchen an welcher der Wert steht (Ein Stream ist ja nicht mehr als eine aneinanderkettung der Zeichen.) den du überschreiben willst.
Kurzum du suchst wohl jedes zweite newline Zeichen. Um Plattformunabhängig zu bleiben solltest du sowas wie das allgemeine LineSeperator verwenden. Wenn du das entsprechende gefunden hast kannst du mit
der write methode und den offset dort Werte reinschreiben. Problematisch wirds halt wenn die länge unterschiedlich wird. K.A. was man da am besten macht.
 
Mach's doch so:
Code:
private static void rewriteSecondLine(
      Reader source,
      Writer dest,
      String text) throws IOException {
  final String newLine = System.getProperty("line.separator", "\n");
  final BufferedReader reader = new BufferedReader(source);

  String line = reader.readLine();
  if (line != null) {
    /* copy first line */
    dest.write(line);
    dest.write(newLine);

    /* rewrite second line */
    dest.write(text);

    /* copy tail */
    while ((line = reader.readLine()) != null) {
      dest.write(newLine);
      dest.write(line);
    }
  }
  dest.flush();
}

Entweder Du schreibst die Datei in ein Temp-File, löschst dann das alte und benennst das neue um, oder Du schreibst mit StringWriter in nen String und überschreibst danach die Datei mit dem Inhalt des Strings. Wenn die Datei groß ist, würde ich von zweiter Variante absehen.

Grüße, Ebenius
 
was mir noch aufgefallen ist, ist dass der code ganz oben immer texte anhängt. dachte eigentlich dass er das file immer wieder neu überschreiben muesste. gibt es ein flag das man da setzen kann damit er nicht beim write apendet
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben