Input/Output String aus einer Datei einlesen und in anderer Datei speichern

Kopfgeburt

Mitglied
Dieses Programm liest eine Textdatei und untersucht den Text auf bestimmte Worte, die mit anderen ersetzt werden. Den so geänderten Text speichert es in einer anderen Datei.

Java:
package textbearbeitung;

import java.io.*;
import java.util.*;

public class Textbearbeitung {

    public static void main(String[] args) {      
        Scanner sc = new Scanner(System.in);
        String datei = "output.txt";
        System.out.println("Welche Zeichenfolge soll ersetzt werden? (Eingabe mit [enter] bestätigen)");
        String search = sc.nextLine();
        System.out.println("Mit welcher Zeichenfolge soll sie ersetzt werden? (Eingabe mit [enter] bestätigen)");
        String destroy = sc.nextLine();
        System.out.println("");
      
        try (FileReader f = new FileReader("Praktikumsbericht.txt");           
                BufferedReader in = new BufferedReader(f);) {
                String line = in.readLine();
                while (line != null) {
                    try (FileWriter fw = new FileWriter(datei, true);
                        PrintWriter pw2 = new PrintWriter(fw);){
                        line = line.replace(search,destroy);
                        System.out.println(line);
                        pw2.println(line);
                    }
                    catch (IOException e) {
                        System.out.println("Fehler2");
                    }
                    line = in.readLine();
                }
            }
        catch (IOException e) {
            System.out.println("Fehler1");
        }
    }  
}

Solange die Datei, die ich auslese (Praktikumsbericht.txt) und die, in der ich das Gelesene speichere (output.txt) vom Typ .txt sind, funktioniert es. Die Umlaute bleiben allerdings auf der Strecke und werden durch Fragezeichen-Symbole ersetzt.

Von .doc in .txt funktioniert auch noch einigermaßen, der Text wird dann aber von Zeichenchaos begleitet, von .doc nach .doc bleibt meine output.doc leer. Was muss ich ändern? Und gibt es Befehle, die mir erlauben das Textformat (damit meine ich fett bleibt fett, Schriftgröße 11 bleibt 11 etc.) beizubehalten?
 
Zuletzt bearbeitet von einem Moderator:
.doc ist kein reines Textformat und hat auch keine öffentliche Doku (oder hat sich das mittlerweile geändert?) , da lässt sich nicht einfach Text suchen und ersetzen. UU gibts da drittanbieter-packages für, allerdings kenne ich keins...

Wieso verwendest du Scanner?
Spricht da bei einfachen Texteingaben über StdIn was gegen?
 
Wenn Umlaute nicht korrekt angezeigt werden must du beim einlesen und schreiben jeweils das benötigte Charset mitgeben, wie etwa UTF-8
 
ä ö und ü sind im Englischen nicht vorhanden, daher werden sie falsch angezeigt. Damit das klappt musst du dein Encoding angeben, damit sie wieder richtig dargestellt werden Für nen BufferedReader macht man das so:
Java:
try {
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt"), "UTF-8"));
        } catch (FileNotFoundException | UnsupportedEncodingException ex) {
            ex.printStackTrace();
        }
Als Beispiel. Das sollte schon genügen. Zur not beim schreiben nochmal in umgekehrter Richtung.
 
Wenn toReplace und replaceWith dieselbe Länge hat, könnte es auch mit .doc's funktionieren. So ähnlich wie Java-Binaries.

charSet brauchst du aber nicht.
 
Edit: Schnell hab ich mich ran gemacht und selber etwas geschrieben, so solltest du es machen:
Java:
import java.io.*;
import java.util.*;

/**
 * @author DerWissende on 03/05/2016
 */
public class ReplaceFileContent {
    /* TODO */ enum Opti {
        EXACT,
        REGUL
    }

    public ReplaceFileContent(File oldFile, File newFile, String toReplace, String replaceWith, Opti opti) throws IOException {
        StringBuilder builder = new StringBuilder();
        FileReader reader = new FileReader(oldFile);
        int c;
        while ((c = reader.read()) != -1) {
            builder.append((char) c);
        }
        reader.close();

        switch (opti) {
            case EXACT:
                builder = new StringBuilder(builder.toString().replaceAll(toReplace, replaceWith));
                break;
            case REGUL:
                // TODO
            default:
                // TODO
        }

        FileWriter writer = new FileWriter(newFile);
        writer.write(builder.toString());
        // TODO
        writer.close();
    }

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println(Arrays.toString(Opti.values()) + ":");
        String s1 = reader.readLine();
        System.out.println("oldFile:");
        String s2 = reader.readLine();
        System.out.println("newFile:");
        String s3 = reader.readLine();
        System.out.println("toReplace:");
        String s4 = reader.readLine();
        System.out.println("replaceWith:");
        String s5 = reader.readLine();
        System.out.println(s1 + " " + s2 + " " + s3 + " " + s4 + " " + s5);
        ReplaceFileContent replaceFileContent = /* TODO */;
    }
}

Wichtige Stellen hab ich ausgelassen, selber etwas nachdenken!!!

Das Schöne ist, tritt irgendwo ein Fehler auf, wird's Programm einfach beendet und Nix schlimmes ist passiert. 😉

Variablennamen nenne ich immer etwas seltsam.
 
Oh man, Dein gesamtes Offtopic könnte eigentlich von Mods gelöscht werden, aber ich will hier keine Handlungshinweise geben.
 
denn damit kann er es bedenkenlos auch mit noch brauchbaren Dokumenten machen
Na, hast du es auch schon rausgefunden ? So eine .doc - Datei enthält jede Menge ganz normaler abdruckbarer Zeichen die aber Steuerdaten oder Teile davon sind. Jetzt ersetzt jemand einfach eine solche Zeichenfolge durch eine gleichlange andere und das Dokument kann nicht mehr geöffnet werden.

Edit: und nicht dass du meinst das wären abwegige Zeichenfolgen: bei mir kam irgendwo in den Steuerdaten die Zeichenfolge "ist" vor. Jetzt habe ich einfach in der ganzen Datei "ist" durch "war" ersetzt und das Dokument war kaputt !
 
Zuletzt bearbeitet:

Zurück
Oben