Java 9: Inhalt einer Textdatei in eine andere Datei kopieren
Im letzten Tutorial habe ich euch gezeigt wie ihr den Inhalt ein Textdatei auslest und filtern könnt. Jetzt zeige ich euch wie ihr den Inhalt einer Textdatei auslesen könnt und diesen Text wieder in eine andere Textdatei schreibt.
Dazu benötigt ihr erst einmal diese 2 Packages:
import java.io.FileWriter; import java.io.BufferedWriter; |
Dies ist der Code wie ihr den Text von einer Variablen in eine Textdatei schreiben könnt. Damit wird der Text Bla in die Datei Logfile2.txt erstellt.
BufferedWriter inFile2 = new BufferedWriter (new FileWriter ("D:\\Logfile2.txt")); String Text = "Bla"; inFile2.write(Text); |
Die eigentliche Aufgabe habe ich oben schon einmal beschrieben ihr sollt den Inhalt einer Textdatei auslesen und diesen Text in einer anderen Textdatei einfügen. Dazu erstellt in dem Ordner wo sich eure Logfile.txt befindet eine Logfile2.txt Datei.
So sollte euer fertiges Programm ca. aussehen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package kopieren; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.FileReader; import java.io.FileWriter; import java.io.BufferedWriter; /** * * @author Andreas */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { try { BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); System.out.println("*****************"); System.out.println("*** Kopieren ***"); System.out.println("*****************"); String aktline = ""; BufferedReader inFile = new BufferedReader (new FileReader ("D:\\Logfile.txt")); BufferedWriter inFile2 = new BufferedWriter (new FileWriter ("D:\\Logfile2.txt")); aktline = inFile.readLine(); while (aktline!= null) { inFile2.write(aktline); System.out.println(aktline); aktline = inFile.readLine(); } inFile.close(); inFile2.close(); } catch(Exception ex) { System.out.println("Irgendwas ist schief gelaufen !!!"); System.out.println(ex.getMessage() ); } // TODO code application logic here } } |
- In der Zeile 10 und 11 werden die 2 Packages importiert welche ihr zum beschreiben einer Textdatei benötigt.
- In der Zeile 37 und 38 definieren wir die Datei welche ausgelesen werden soll und welche eingelesen werden soll.
- In der Zeile 40 lesen wir den ersten wert aus der Datei Logfile.txt aus.
- In der Zeile 42 starten wir wieder unsere while Schleife welche wir schon vom auslesen der Textdatei kennen.
- In der Zeile 44 schreiben wir das was wir den Inhalt der ersten Zeile von dem Logfile.txt in die Textdatei Logfile2.txt
- In der Zeile 45 geben wir den Inhalt auf der Console aus welchen wir in der Zeile 44 in das Logfile2.txt geschrieben haben.
- In der Zeile 46 lesen wir wieder die nächste Zeile aus der Logfile.txt aus.
- In der Zeile 48 und 49 schließen wir wieder die 2 Textdateien.
Hier geht es zu den bisherigen Teilen der Artikelserie Java:
Java 1: Netbeans die ersten Schritte und Hello World
Java 3: Werte einlesen, zwischenspeichern und wieder ausgeben
Java 4: Kassen Programm mit if Abfrage
Java 5: Kassen Programm while, do-while Schleife
Java 6: Kassen Programm For Schleife
hey danke, das kann ich für mein java projekt für die uni gut gebrauchen, danke
Danke für die tolle erklärung ist wirklich ienfach zu verstehen!
Danke, hat mir sehr geholfen.
Hallo,
Kurze Frage ist es notwenig vorher bei Textdatein zu erstellen? Weil momentan wird keine logfile2.txt erstellt in der man etwas sieht? Oder liegt das eventuell an enzogenden Schreibrechten für das Script?
Vielen Dank für die Hilfe.
Ich bin mir jetzt nicht mehr ganz sicher ob die Dateien automatisch erstellt werden. Denn ich habe sie immer seber zuerst erstellt. Würde das an deiner stelle auch einfach mal versuchen.
Aber das es bei Vista z.B. zu Problemen mit den Berechtigungen kommen kann hab ich auch schon gehört. Ich selber benützte jetzt kein Vista daher kenne ich mich da nicht gut aus.
Wenn du Vista benützt lohnt es sich auf jeden Fall wenn du noch mal nach den Rechten schaust und die Dateien vielleicht mit Adminrechten erstellst.
So richtig rund ist das Beispiel nicht.
Weil das schliessen im finaly Block stattfinden sollte, um sicher zu stellen das auch bei einem Fehler der Leser & Schreiber nicht offen bleiben. Bleiben sie offen finden sich zwei gesperrte Dateien unter Windows auf dem Datenträger. Kommt der Fall oft vor. Kann es zu einem Speicherüberlauf kommen weil die zwei lese/schreib buffers auf ein schliesen warten das nicht kommen wird. So einen Fehler zu finden ist besonders urgly insbesondere wenn dieser Part als Damon/Dienest läuft.
…
inFile2.write(aktline);
System.out.println(aktline);
aktline = inFile.readLine();
}
//gehört ins finaly inFile.close();
// inFile2.close();
}
catch(Exception ex)
{
System.out.println(„Irgendwas ist schief gelaufen !!!“);
System.out.println(ex.getMessage() );
}finally{
if( inFile != null ){
try{
inFile.close();
}catch ( IOException e ){
// ignore nichts mehr zu retten.
}
// noch mal mit dem anderen buffer
}