2009-07-15 6 views
2

Ich versuche, ein Programm zu schreiben, das Unicode-Strings aus einer Datei gelesen manipuliert. Ich dachte über zwei Ansätze nach - einen, bei dem ich die ganze Datei mit Zeilenumbrüchen einliest, ein paar Regex-Substitutionen vornehme und sie in eine andere Datei zurückschreibe; das andere, wo ich Zeile für Zeile in der Datei lese und einzelne Zeilen anpasse und an sie setze und schreibe sie aus. Ich konnte den ersten Ansatz nicht testen, da die Zeilenumbrüche in der Zeichenfolge nicht als Zeilenumbrüche in die Datei geschrieben werden. Hier ist ein Beispiel-Code zu veranschaulichen:Newlines in Zeichenfolge nicht in Datei schreiben

String output = "Hello\nthere!"; 
BufferedWriter oFile = new BufferedWriter(new OutputStreamWriter(
    new FileOutputStream("test.txt"), "UTF-16")); 

System.out.println(output); 
oFile.write(output); 
oFile.close(); 

Die print-Anweisung gibt

Hallo
da!

aber die Dateiinhalte sind

Hellothere!

Warum werden meine Zeilenvorschübe nicht in die Datei geschrieben?

+3

Notepad kann Textdateien nicht ordnungsgemäß mit \ n anzeigen. – akarnokd

+0

Sehen Sie, ob es immer noch mit \ r \ n funktioniert –

+0

Ja, ich habe es gerade ausprobiert und es funktioniert. Es ist komisch, aus irgendeinem Grund erinnere ich mich, dass Notepad zumindest ein Zeichenzeichen nicht anzeigt, wenn es nur eine 0x0A selbst gesehen hat, aber ich denke nicht. –

Antwort

9

Sie sollten versuchen,

System.getProperty("line.separator") 

Hier verwenden, ist ein nicht getestet Beispiel

String output = String.format("Hello%sthere!",System.getProperty("line.separator")); 
BufferedWriter oFile = new BufferedWriter(new OutputStreamWriter(
    new FileOutputStream("test.txt"), "UTF-16")); 

System.out.println(output); 
oFile.write(output); 
oFile.close(); 

Ich habe nicht in der Lage, den ersten Ansatz zu testen, weil die Zeilenumbrüche in der Zeichenfolge nicht geschrieben als Zeilenumbrüche zu die Datei

Sind Sie sicher? Könnten Sie einen Code posten, der diese spezifische Tatsache anzeigt?

+0

Gut Teil davon ist, dass ich nur eine Datei in einer Zeile zu einer Zeit lesen kann, so wurden die Zeilenumbrüche, die ich * zur Verfügung gestellt wurde *, aber nur als LF, nicht CRLF, und wurden nicht richtig angezeigt Notizblock, wie kd304 darauf hingewiesen. –

1

Verwenden Sie System.getProperty ("line.separator"), um die plattformspezifische neue Zeile zu erhalten.

1

Ziehen Sie die Verwendung von PrintWriter in Betracht, um die println-Methode z. System.out

Verwandte Themen