Textausgabe in Datei

Status
Nicht offen für weitere Antworten.

obiwankenobi

Mitglied
Hallo,

ich möchte einen String in eine Datei schreiben. Der String beinhaltet eine Zeichenkette die z.B. so aussieht.

"Text1\nText2\nText3\n ....." usw.

Momentan wird dieser String so in eine Datei geschrieben.

Code:
DataOutputStream dos = new DataOutputStream(new FileOutputStream(file.getName() +".log"));
dos.writeUTF(outString);

Dies funktioniert insoweit sehr gut. Nur den Zeilenumbruch erkennt er nicht.
Gebe ich den String mit dem Befehl System.out.println aus, so wird der Zeilenumbruch erkannt. In der Datei ist Umbruch nur sichtbar wenn ich die Datei z.B. mit Word öffne aber nicht z.B. mit einem einfachen Texteditor.

Gibt es einen Writer oder einen Stream, welcher einen Zeilenumbruch (\n) in einem String automatisch erkennt?

Ich habe bereits sämtliche, von Java zur Verfügung gestellte Klassen in unterschiedlichsten Kombinationen ausprobiert (PrintWriter/FileWriter/BufferedWriter etc.). Bei diesen Klassen wurde aber gar nichts oder nur wirre Zeichen in die Datei geschrieben.

Vielen Dank für eure Hilfe.

Sebastian
 
Hallo,

der Code wie ich PrintWriter verwendet habe sieht folgendermaßen aus.
Code:
PrintWriter out = new PrintWriter(new FileWriter(file.Name() +".log"));
out.println(outString);

oder
Code:
PrintWriter out = new PrintWriter(new FileOutputStream(file.Name() +".log"));
out.println(outString);
Das gleiche habe ich auch schon mit BufferedWriter versucht.

Wie gesagt. Entweder es wird gar nichts geschrieben (Datei bleibt leer), oder es werden wirre Zeichen geschrieben. Habs mit Debug durchgetestet und in dem String steht immer das richitge drin. Daran liegt es also nicht. Gehe davon aus, dass PrintWriter die Ascii-Zeichen nicht umsetzen kann.

Danke.

Sebastian
 
Wieso er erkennt es nicht? Mit welchem Programm schaust du die Ausgabedatei denn an? Der Standardwindowseditor erkennt \n nicht, benutz mal TextPad oder so was.
 
Das hatten wir jetzt doch auch schon ein paar mal!!! Ersetz mal
Code:
\n
durch
Code:
System.getProperty("line.separator");
 
Warum machst du es nicht einfach so:

Code:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;

/*
 * Created on 09.05.2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author Zille
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class FileSchreiber {
    
    public static void main(String[] a){
        if(new FileSchreiber().writeToFile("c:/myFile.txt","Dies\nist\nein\nTesttext."))
            System.out.println("Datei erfolgreich geschrieben.");
        else
            System.out.println("Beim Schreiben ist ein Fehler aufgetreten.");
            
    }
    
    public boolean writeToFile(String pfad, String text){
        BufferedWriter bw = null;
        FileWriter fw = null;
        File datei = null;
        String[] zeilen = text.split("\\n"); //Text in Zeilen spalten
        try {
        datei = new File(pfad); //Datei in die geschrieben werden soll
        fw = new FileWriter(datei);
        bw = new BufferedWriter(fw);
        
        for (int x=0;x<zeilen.length;x++){
            bw.write(zeilen[x]);//Lines in Dateischreiben
            bw.newLine();//Return einfügen
        }
        
        bw.close();
        return true;
        } catch (IOException e) {
            return false;
        }
    }
}

Sollte funktionieren... 😀
 
Hallo,

danke für eure Anregungen. Habe mir sehr geholfen.

Habs jetzt so gemacht. Hätt ich auch selber draufkommen können, aber ich habe noch andere Probleme zu lösen, die weitaus komplexer sind.

Anstatt

Code:
dos.writeUTF(outString);

so

Code:
dos.writeUTF(outString.replaceAll("\\n", System.getProperty("line.separator")));

Funktioniert super und schadet auch nicht der Performance.

Danke.

Sebastian
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben