CSV Datei wird ungewollt umformatiert

Jesfreric

Aktives Mitglied
Liebes Forum

Ich habe ein kleines Javaprogramm geschrieben, dass eine Ausgangsdatei XYZ modifiziert (Einfügen von anderen Textabschnitten) und in der Datei XYZnew speichert.
Die Dateien werden über eine separate Software geöffnet und verarbeitet. Das Problem ist, dass die Ausgangsdatei XYZ ohne Probleme von dieser Software geöffnet werden kann, während XYZnew nicht geöffnet wird.
Der Inhalt der neuen Datei ist zu 100% (wirklich sicher) kompatibel.

Allerdings ist mir beim Vergleich mit dem Notepad++ Editor aufgefallen, dass in der Ausgangsdatei unten "DOS/WINDOWS" steht und in der neuen "UNIX".
Wie ist es nur zu der Umformatierung gekommen? Und wie kann das Problem behoben werden?
Ebenfalls eigenartig. Wenn ich beide Files mit dem Windows Editor öffne, dann wir bei XYZ der Text korrekt angezeigt, bei XYZnew aber ohne Textumbrüche. Im Notepad++ werden beide korrekt dargestellt.

Für Textumbrüche habe ich in Java „\n“ verwendet.

Eine nachhergehende Änderung der Files ist unglücklich, da es ein sehr großer Aufwand wäre…

Viele Grüße
Richi

P.S.: Wie in der Überschrift erwähnt handelt es sich um CSV Datein.
 
Zuletzt bearbeitet:
Hi,
Es kann sein, dass das Orginal mit UNIX erstellt wird. In Unix (Linux) wird nur ein "\n" für ein Zeilenumbruch benötigt.
Windows hingegen macht "\r\n" für einen Zeilenumbruch.
probier doch mal ein "\r\n" statt ein "\n" beim Hinzufügen deiner Elemente.
Du kannst sehen, wie ein newline erstellt wird: probier das mal auf Windows und Unix (Linux) dabei wirst du unterschiedliche Ausgaben haben:
13, 10 in Windows und 10 in Unix...
Java:
public static void main(String[] args) {
	String eol = System.getProperty("line.separator"); 
	byte[] b = eol.getBytes(Charset.forName("UTF-8"));
	for (int i = 0; i < b.length; i++) {
		System.out.print(b[i] + "," );
	}
	System.out.println();
}
Gruss knilch
 
Zuletzt bearbeitet:
Update:

Also ich habe es mit /r/n versucht. Leider geht es immer noch nicht.
Aber das Problem liegt auf JEDEN Fall an den Zeilenumbrüchen.

Folgendes weiß ich momentan:
Die Ausgangsdatei (XYZ) scheint durchweg mit /r/n geschrieben zu sein.
Nachdem ich aber das Java Programm hab laufen lassen scheint alles in /n formatiert worden zu sein.
Zumindest erkennt der Windows Editor noch nicht einmal mehr die Umbrüche die ich gar nicht bearbeitet habe. Der Ausgangstext, der also einfach unverändert übertragen wurde ist plötzlich falsch formatiert.
Die manuell eingefügten Umbrüche werden korrekt dargestellt.
Kann man Java irgendwie begreiflich machen, dass man \r\n statt \n Formatierung möchte?

Viele Grüße
Richi
 
Eine weitere Anmerkung.
Ich schreibe meine Datei mit Hilfe des FileWriters.
Dort wird ja (soweit ich weiß) Zeile für Zeile geschrieben. Wahrscheinlich inseriert Java dort automatisch als Umbruch ein "\n" was Windows dann wieder nicht lesen kann, weil es ja "\r\n" benötigt.
Gibt es eine Möglichkeit Java zu sagen es soll "\r\n" einfügen?

Oder kann es eine Ursache sein, dass ich auf einem "deutschen" Rechner kompiliert habe und das Programm auf einem "englischen" läuft?
 
Hi,
Oder kann es eine Ursache sein, dass ich auf einem "deutschen" Rechner kompiliert habe und das Programm auf einem "englischen" läuft?
Ich denke nicht, dass es daran liegt, da der Zeilenumbruch vom OS abhängt (Unix oder Windows).
Eine weitere Anmerkung.
Ich schreibe meine Datei mit Hilfe des FileWriters.
Dort wird ja (soweit ich weiß) Zeile für Zeile geschrieben. Wahrscheinlich inseriert Java dort automatisch als Umbruch ein "\n" was Windows dann wieder nicht lesen kann, weil es ja "\r\n" benötigt.
Gibt es eine Möglichkeit Java zu sagen es soll "\r\n" einfügen?
Erstellst du vor dem Schreiben des CSV einen String, der den ganzen Inhalt hat? Wenn ja, wie machst du diesen String (StringBuilder, oder String concatenation?)
Kannst du den Code mal posten, den du verwendest, um die CSV Daten zu Ändern und dann zu Speichern?
 

Neue Themen


Zurück
Oben