Ich habe nur die Fragen durchgelesen und ich fand System.getProperty(line.separator)
anstelle von \n
mit dem Kommentar des Autors, dass der Code "portabel" war. In verschiedenen Foren habe ich zwei Gruppen gesehen:
Mein Gefühl ist: Es sind wahrscheinlich Nicht-Standard-Betriebssysteme, wie zum Beispiel das Betriebssystem Ihres Unternehmens, wo Sie einen Unterschied bemerken. Wann sehe ich einen Unterschied zwischen \n
und line.separator
? Können Sie bitte ein Beispiel zeigen? Wie haben Sie herausgefunden, wo die Variation auftritt?
Falsche Zeilenenden sind ein häufiges Ärgernis. Dies zeigt zum Beispiel Windows Notepad beim Schreiben einer Datei mit \n
anstelle von \r\n
(Windows 'line.separator):
Diese kleinen Boxen sollten Zeilenumbrüche sein.
Anders herum, wenn \r\n
anstelle von \n
(Unix 'line.separator) verwendet wird, ist es viel schlimmer und bricht Shell-Skripte und Konfigurationsdateien auf seltsame und wunderbare Weise.
Beispielsweise gibt sh
auf Debian und abgeleiteten Distributionen aus, wenn ein Shell-Skript ausgeführt wird, das nur ls
aber mit \r\n
-Zeilentrennzeichen enthält (es sieht verwaist aus, weil der Wagenrücklauf das Terminal dazu veranlasst) Teile der Zeile überschreiben):
Es gibt mehrere Fragen pro Tag auf StackOverflow von Leuten, die davon gebissen werden, wie hier , hier und hier .
Hier sehen Sie die Standardzeilentrennzeichen nach Betriebssystem:
%Vor% Das heißt, wenn Sie Ihre Zeilentrennzeichen als \n
fest codieren, erhalten Sie unter Linux und OS X die erwarteten Ergebnisse, aber Windows erkennt die Zeilenenden nicht richtig. Wenn Sie jedoch die allgemeinere line.separator
zur Darstellung Ihrer Zeilenenden verwenden, werden sie in die von dem ausführenden Betriebssystem erwartete Implementierung von Zeilenenden aufgelöst.
Wenn Sie das falsch verstehen, werden Sie Ihre Fähigkeit, Daten mit anderen Anwendungen auszutauschen, vermasseln. Sie müssen verstehen, wann Sie davon ausgehen können, dass Java Ihnen helfen wird ... und wenn Sie nicht können.
Linux-Anwendungen verwenden normalerweise nur das Zeilenvorschubzeichen (\ n) als Zeilenumbruch. Windows-Anwendungen verwenden die Kombination aus Wagenrücklauf gefolgt von Zeilenvorschub (\ n \ r).
Wenn Sie High-Level-Java-I / O-Routinen verwenden - wenn Sie durch Reader und Writer gehen, die Zeichen verarbeiten, anstatt Low-Level-Streams und insbesondere Byte-Streams - übersetzen die Bibliotheken \ n ( welches Java per Konvention intern als Newline verwendet) in die plattformgerechte Darstellung. Wenn Sie Funktionen auf niedrigerer Ebene verwenden, müssen Sie sich dieser Unterscheidung bewusst sein und das Richtige selbst tun.
Tags und Links java newline portability linefeed