Zeile in Datei ändern

BillaBong

Erfahrenes Mitglied
Hi,

ich möchte eine Datei Einlesen und an gewissen stellen abändern. Das Einlesen ist nicht das Problem, viel mehr das abändern der ausgewählten Zeile.

Code:
String wert = "wertX";
		String zeile;
		StringBuffer lesepuffer = new StringBuffer();
		
			DateiPfade_Festwerte pfad = new DateiPfade_Festwerte();
		try{
			FileReader freader = new FileReader((String)pfad.HStable().get("Pfad_Option"));
			BufferedReader in = new BufferedReader(freader);
	
					
			while((zeile = in.readLine()) != null){
				lesepuffer.append(zeile);
				if(zeile.contains(wert)){
					if(zeile.contains("1")){
						//schreibe neue zeile XY
					}
					if(zeile.contains("0")){
						//schreibe neue zeile XY	
					}
				}else{
					System.out.println("nichts vorhanden");
				}
			}
			freader.close();		
		}catch(IOException e){
			
		}


in einer Zeile steht jetzt zum Beispiel "wertX" = 0 / 1 und ich würde gerne in der Zeile wo "wertX" steht das 0 oder 1 ändern.
 
Wo genau ist dein Problem? Wenn es bekannte Werte sind, kannst du sie einfach mit einem "String.replace()" abändern.
Wenn diese Datei eine Art Configdatei sein sol, und due sie beinflussen kannst, solltest du dich vielleicht mit den sogenannten property-files auseinander setzen.
 
Das Problem ist das ich nicht weiss wie ich an genau der Zeile / Stelle wo ich den Wert gefunden habe, den bestehenden Wert überschreiben kann.
 
Wo genau ist dein Problem? Wenn es bekannte Werte sind, kannst du sie einfach mit einem "String.replace()" abändern.
Wenn diese Datei eine Art Configdatei sein sol, und due sie beinflussen kannst, solltest du dich vielleicht mit den sogenannten property-files auseinander setzen.

Kann mich dem nur anschließen. Wenn du schon weißt, was du suchst, dann sollte das doch kein Problem sein.

Ich weiß nicht, was du mit dem Lesepuffer anstellst, aber wenn der die Datei repräsentieren soll, dann würde ich via String.replace() erstmal die eingelesene Zeile ändern und erst dann in den Puffer haun. Die Datei neu schreiben zu lassen ist ja nicht das Problem.
 
Der Lesepuffer habe ich vergessen rauszunehmen, mein Problem ist das ich nicht weiss wie ich die Zeilen abändere und dann die Datei neu schreiben soll.
 
Ob das für deinen Fall so passt, weiß ich nicht, aber wäre son Beispiel:

Java:
package de.tutorials.billabong.zeileaendern;

import java.io.*;

public class ZeileAendern {
	public static void main(String[] args) {
		BufferedReader reader = null;
		BufferedWriter writer = null;
		StringBuffer lesepuffer = null;

		String wert = "wertX";
		String filePath = ""; // Dateipfad

		// Lesen
		lesepuffer = new StringBuffer();
		try {
			reader = new BufferedReader(new FileReader(filePath));

			String zeile = null;
			while((zeile = reader.readLine()) != null) {
				// Ändern
				if(zeile.contains(wert)) {
					if(zeile.contains("1")) {
						// schreibe neue zeile XY
						// zeile.replace("1", "0");
					} else if(zeile.contains("0")) {
						// schreibe neue zeile XY
						// zeile.replace("0", "1");
					}
				} else {
					System.out.println("nichts vorhanden");
				}

				// Puffern
				lesepuffer.append(zeile + System.getProperty("line.separator"));
			}
		} catch(FileNotFoundException e) {
			e.printStackTrace();
		} catch(IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if(reader != null) reader.close();
			} catch(IOException e) {
			}
		}

		// Lesepuffer speichern
		try {
			writer = new BufferedWriter(new FileWriter(filePath));

			writer.write(lesepuffer.toString());
			writer.flush();
		} catch(IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if(writer != null) writer.close();
			} catch(IOException e) {
			}
		}
	}
}
 
@Akeshihiro: Mit deinem Beispielcode konnte ich was anfangen vielen danke !


Code:
package option;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
public class Option_Wert_Setzen {

public void Setze_Wert(String wert){
	//public static void main(String[] args) {
        BufferedReader reader = null;
        BufferedWriter writer = null;
        StringBuffer lesepuffer = null;
 
        //String wert = "autostart";
        
  // Pfade werden aus Config Datei gelesen
        main.DateiPfade_Festwerte pfad = new main.DateiPfade_Festwerte();
        String filePath = (String)pfad.HStable().get("Pfad_Option");
   // Lesen
        lesepuffer = new StringBuffer();
        try {
            reader = new BufferedReader(new FileReader(filePath));
 
            String zeile = null;
            while((zeile = reader.readLine()) != null) {
            // Ändern + Zeile Puffern wenn "Wert" vorhanden
                if(zeile.contains(wert)) {
                    if(zeile.contains("1")) {
                    	lesepuffer.append(zeile.replace("1", "0") + System.getProperty("line.separator"));               	 
                    }
                    if(zeile.contains("0")) {
                    	lesepuffer.append(zeile.replace("0", "1") + System.getProperty("line.separator"));
                    }
                }else{
            // Zeile Puffern wenn "Wert" nicht vorhanden
                	lesepuffer.append(zeile + System.getProperty("line.separator"));
                }
            }
        } catch(Exception e) {
            System.out.println("Datei nicht gefunden");
        }
 
   // Lesepuffer speichern
        try {
            writer = new BufferedWriter(new FileWriter(filePath));
     
            writer.write(lesepuffer.toString());
            writer.flush();
        } catch(IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(writer != null) writer.close();
            } catch(IOException e) {
            }
        }
    }
}
 
Zurück