FileWriter / FileReader

  • Themenstarter Themenstarter Krehk
  • Beginndatum Beginndatum
K

Krehk

Gast
Guten Abend,
dieses Forum hat mir schon stark geholfen, jetzt muss ich aber mal selber eine frage stellen.
Hiermit lese ich eine Datei aus nach dem Zeichen Code "abc", wenn gefunden soll er diesen durch "def" ersätzen.
Nur mein problem ist, ich kriegen den Filewriter nicht richtig hin, im moment ist der noch seperat und überschreibt die gesamte Datei... nicht so prickelnd 🙁

kann mir da einer helfen ?

ps: da sind noch viele teilprojekte drin, ergo viel toter code, im moment brauch ich nur das mit dem WRITER ... geh gleich die wand hoch :-( ich stehe seit geraumer zeit aufm Schlauch!!!


Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.StringTokenizer;


public class Wordzugriff {

	public Wordzugriff(){
		   String line = null;
		   int Zeile[] = new int[100];
		   int ZEILEN = 0;
	        File datei = new File("C:/Users/Jens/Desktop/TEST/Neuer Ordner/BLUBB.txt");
		   
		    try {
		        BufferedReader br;
		        FileReader fr = new FileReader (datei); //Zugriff auf die Datei
		        br = new BufferedReader (fr);
		        while ((line = br.readLine()) != null )   
		        {
		         ZEILEN = ZEILEN +1;   
		            if (line.contains("abc"))   //vergleich der Zeile
		            {
		            Zeile[ZEILEN] = ZEILEN;	
		            System.out.println("asd" + Zeile[ZEILEN]);
		            }    
		           
		           
		        }
		          //br.close();               Close hier richtig?
		    }
		    catch (FileNotFoundException e)
		    {
		        e.printStackTrace();
		    }
		    catch (IOException e)
		    {
		        e.printStackTrace();
		    }
		    
		    
		    

	        FileWriter schreiber;
			try {
				schreiber = new FileWriter(datei);
			    schreiber.write("BLAAAAAAAAAAAAAA");
		        schreiber.close();
		        
		        
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	 


	}
	
	public static void main(String[] args) throws FileNotFoundException {
				
		Wordzugriff ff = new Wordzugriff();

	}

}
 
Ich bin mir nicht ganz sicher, was Du machen willst; wenn Du Zeichen irgendwo mitten in einer Datei verändern willts, dann ist das eher eine Aufgabe für RandomAccessFile.
Mit dem FileWriter kannst Du die Datei nur überschreiben oder am Ende etwas anhängen.

Vielleicht könnte die Lösung aber auch sein:
- Quelldatei zeilenweise lesen
- Zeilen entweder im Originalzustand oder verändert in temporäre Zwischendatei schreiben
- am Ende Quelldatei löschen und Zwischendatei in Quelldatei umbenennen
 
Hallo danke dir,
ich kriege es bedingt hin.
allerdings, gibt es eine funktion, ähnlich "replace" ?
Bzw. hat einer das schon geschreiben, ich kriege es nicht hin.

"--
suche nach "abc"
if found
replace "abc" with "def"
"--

Java:
public class Datenmanu {

	public Datenmanu() throws FileNotFoundException{
		String line = null;
		File datei = new File("C:/Users/Jens/Desktop/TEST/Neuer Ordner/BLUBB.txt");
		 
        try {
            RandomAccessFile raf = new RandomAccessFile(datei, "rw");
            // Read a character
            int i = 0;
            while ((line = raf.readLine()) != null ){
            	i = i +1;
	            if (line.contains("abc"))   //vergleich der Zeile
	            {
	            	System.out.println("gefunden" + i);
	            	raf.seek(i);
	            	raf.writeBytes("def");
	            }    	           
	        }
            raf.close();
          
        } catch (IOException e) {
            System.out.println("IOException:");
            e.printStackTrace();
        }
    }
 
    public static void main(String[] args) {
       try {
		Datenmanu ff = new Datenmanu();
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
    }
 
Java:
            while ((line = raf.readLine()) != null ){
            	i = i +1;
	            if (line.contains("abc"))   //vergleich der Zeile
	            {
	            	long fpointer = raf.getFilePointer();
	            	fpointer = raf.getFilePointer() - line.length() -2;
	            	raf.seek(fpointer);
	            	raf.writeBytes("def");
	            	System.out.println("gefunden" + i);
	            }    	           
	        }
            raf.close();

Okey nun läuft es und ersetzt sachen.

Nur mein problem ist, wenn ich vor der Zeichenkette etwas stehen habe gibt es probleme in form von falscher verarbeitung.
Wenn die Zeile mit meinen Testwort "abc" beginnt ist das kein problem alles dahinter bereitet auch keine probleme ... ... 🙁


Hilfe ? :-(
 
Danke dir, diese Funktion ist schön und so ...
aber wie schreibe ich dann den modifiezierten String in die Datei !? Das ist ja mein problem....
 
Ich bitte dringend um hilfe, ich möchte heute am Sonntag das programm fertig haben und es fehlt mir nurnoch die möglichkeit das in die Datei zuschreiben.


Das Problem:

Den Bearbeiten String in die Zeile in der Datei Schreiben!!

hilfe ... ich kriege es nur hin, das er die Datei komplett ersetzt, den Teil in der Datei bestehen lässt und davor, dahinter oder darein schreibt, aber nicht den Teil aus der Datei ersetzt 🙁


Gute Nacht euch noch 🙂

gruß Jens
 
Hm, ich schätze, mit etwas Liebe wirst du den Groschen schon zu Fall bringen 🙂

Spricht denn etwas dagegen, dass du die Zeilen der Datei

1.einliest,
2.bearbeitest (mit replace(...) ),
3. in einem Vector speicherst,

und dann die Datei mit den Elementen des Vectors als Zeilen Überschreibst, bzw. wie mein Vorredner bereits vorschlug, in einer zweiten Datei speicherst. Ich glaube, dass es gar nicht anders geht ^^.

Gruß n.
 
Nur mein problem ist, wenn ich vor der Zeichenkette etwas stehen habe gibt es probleme in form von falscher verarbeitung.
Wenn die Zeile mit meinen Testwort "abc" beginnt ist das kein problem alles dahinter bereitet auch keine probleme

...alles dahinter? Das wüde ja heißen, dass davor was stand, was nach Satz 1 Probleme machen soll. oO Beschreib doch bitte in Zukunft so Sachen wie "Probleme in Form von falscher Bearbeitung" etwas genauer ^^.

Java:
public static void replaceABC() {
    try 
    {
      RandomAccessFile raf = new RandomAccessFile(new File("test.txt"), "rw");
		while(true){
			long rafPosStart = raf.getFilePointer();
			String line = raf.readLine();
			long rafPosEnd = raf.getFilePointer();
			if(line.contains("abc")){
				int pos,last=0;
				System.out.println(line);
				while((pos=line.indexOf("abc",last))!=-1){
					last = pos+2;
					System.out.println(last);
					raf.seek(rafPosStart+pos);
					raf.writeBytes("def");
				}
				raf.seek(rafPosEnd);
			}	
		}
 
    } catch (Exception e) { }
}
 
Zuletzt bearbeitet von einem Moderator:
HeHe,
nahe zu genial 😛 der wirft mir eine nullpoint, aber das kriege ich allein hin (hoff ich 😛)
Das ist eine unsaubere Methode den Nullpoint einfach zu catchen und zu Ignorieren ? ^.^

ps: das was ich geschrieben habe, war in meinem Kopf plausibel. Das ist das problem ...
Beim nächsten mal beschreibe ich es definitiv genauer ... Das Forum gefällt mir, ich denke ich werd mich mal regrestrieren 🙂

Ich werde die 5 Teile jetzt mal zammen fassen und dann hochstellen, falls einer Interesse an einem Programm hat welches :
- Eine Ordnerstruktur nach einem Dateinamen durchsucht ( z.b. C: nach "Test.txt", auch wenn 100x vorkommt)
- Auflistet
- Die möglichkeit der händischen Selektion bietet
- Die datei nach bestimmten Zeichenfolge durch sucht
- Diese durch eine andere Zeichenfolge ersetzt 🙂
- Datei speichert.



Vielen Vielen Dank

Jens
 
😳

Java:
public void replaceABC() {
    try 
    {
        RandomAccessFile raf = new RandomAccessFile(new File("test.txt"), "rw");
        long rafPosStart=raf.getFilePointer(), rafPosEnd;
        String line;
		while((line=raf.readLine())!=null){
			if(line.contains("abc")){
				rafPosEnd = raf.getFilePointer();
				int pos,last=0;
				while((pos=line.indexOf("abc",last))!=-1){
					last = pos+3;
					raf.seek(rafPosStart+pos);
					raf.writeBytes("def");
				}
				raf.seek(rafPosEnd);
			}
            rafPosStart=raf.getFilePointer();
		}
 
    } catch (Exception e) {
        e.printStackTrace();
    }
}
 
Zuletzt bearbeitet von einem Moderator:
mit java.util.Scanenr(), String.replaceAll() und FileWriter kann man das auch so machen.

Java:
package inputoutput;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;

public class ChangeInFile {

    public static void main(String[] args) throws IOException, FileNotFoundException{
            if(args.length != 3){
                System.out.println("Usage: java inputoutput.ChangInFile filename toReplace replacement");
            }else{
            String text = new java.util.Scanner(new File(args[0])).useDelimiter("\\Z").next().replaceAll(args[1], args[2]);
            FileWriter writer = new FileWriter(new File(args[0]));
            writer.write(text);
            writer.flush();
            writer.close();    
            }
    }
}
 

Zurück
Oben