FileWriter / FileReader

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();

	}

}
 

Murray

Top Contributor
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
 
J

JENSK90

Gast
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();
	}
    }
 
J

JENSK90

Gast
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 ? :-(
 
J

JENSK90

Gast
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....
 
J

JENSK90

Gast
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
 

noobadix

Bekanntes Mitglied
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.
 

noobadix

Bekanntes Mitglied
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:
J

JENSK90

Gast
HeHe,
nahe zu genial :p der wirft mir eine nullpoint, aber das kriege ich allein hin (hoff ich :p)
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
 

noobadix

Bekanntes Mitglied
:oops:

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:
J

JohannisderKaeufer

Gast
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();    
            }
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B FileWriter / FileReader testen / Mock-Objekt für Unit Tests? Allgemeine Java-Themen 6
H Dateien lesen und schreiben mit Filereader und Filewriter Allgemeine Java-Themen 2
KaffeeFan FileWriter nur leere Zeilen beschreiben Allgemeine Java-Themen 3
A Swing FileWriter schreibt keine Daten in Datei Allgemeine Java-Themen 13
L Filewriter schreibt Zahlen in Textdatei Allgemeine Java-Themen 2
R Encoding FileWriter Allgemeine Java-Themen 1
G Mit FileWriter in Textdatei über jar Allgemeine Java-Themen 4
V FileWriter und Zahlen (Kein Problem, nur Verständnisfrage) Allgemeine Java-Themen 4
I Filewriter ignoriert Zeilenumbrüche Allgemeine Java-Themen 4
E Umlaute: FileWriter vs. FileOutputStream Allgemeine Java-Themen 3
C FileWriter zu laaaaaaaaaaaam Allgemeine Java-Themen 16
V Unterschied FileOutputStream und FileWriter? Allgemeine Java-Themen 8
H Frage zu FileWriter Allgemeine Java-Themen 12
D FileWriter, PrintWriter und wie sie alle heißen. Allgemeine Java-Themen 13
S Problem!FileWriter Allgemeine Java-Themen 3
G Problem mit FileWriter Allgemeine Java-Themen 7
H Mit filewriter farbigen text schreiben? Allgemeine Java-Themen 7
S FileWriter PrintWriter Allgemeine Java-Themen 5
G Mit FileWriter Zeilenumbruch schreiben Allgemeine Java-Themen 8
Master3000 JAVA Filereader Allgemeine Java-Themen 18
S FileReader-Problem in Eclipse Allgemeine Java-Themen 8
S Input/Output File Not Found FileReader Allgemeine Java-Themen 6
S Input/Output FileReader UTF-8 Datei Allgemeine Java-Themen 7
C OpenJDK - FileReader throws FileNotFoundException Allgemeine Java-Themen 19
G Kopie eines FileReader Allgemeine Java-Themen 4
U Filereader problem Allgemeine Java-Themen 2
S was passiert bei diesem filereader prozess Allgemeine Java-Themen 2
B HTML und FileReader Allgemeine Java-Themen 2
S FileReader Methode nach Zeilen. Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben