Input/Output Wo kommt das Newline her?

  • Themenstarter Themenstarter alex???
  • Beginndatum Beginndatum
A

alex???

Gast
hey,

ich versuche gerade, eine Datei einzulesen:

Java:
try (FileInputStream stream = new FileInputStream(result)) {
            StringBuilder sb = new StringBuilder();
            while (0 < stream.available()) {
                byte[] buffer = new byte[stream.available()];
                int num = stream.read(buffer);
                sb.append(new String(Arrays.copyOf(buffer, num)));
            }
        }

Wenn ich diese Datei mit gedit öffne, hat sie KEIN newline am Ende, es steht "Hallo Welt" drin. Lese ich sie aber so wie oben gezeigt mit Java ein, steht in meinem StringBuilder hinterher "Hallo Welt\n". Woran liegt das?

Vielen Dank schonmal,
Alex
 
Hallo alex???,

welches Betriebssystem benutzt du? Vielleicht Windows. Unter Windows erkennt man erst eine Zeilenumbruch wenn ein "\r\n" benutzt wird. Java hingegen zeigt schon bei einem "\n" einen Absatz an.

Unter Unix Systemen wird auch schon ein "\n" als Absatz erkannt. Bei älteren Macs wird ein "\r" als Absatz erkannt, bei den neueren hingegen "\n".


Ich hoffe ich konnte dir weiterhelfen.
 
Also in Texteditoren ist es meist standardmäßig so, dass am Ende automatisch eine neue Zeile eingefügt wird... Das ist mir schon sehr oft bei vielen aufgefallen und der Sinn dahinter ist mir schleierhaft.

Ich nehme an, wenn du danach die Bytes einliest, es nunmal dabei ist.

Versuche doch mal von Java aus in eine Datei zu erstellen und deinen String zu schreiben (Ohne die Datei mit irgendetwas zu verändern) um dann danach deinen Code nochmals aufzurufen, was dann herauskommt.

Gruß
Net
 
Also:

Betriebsystem ist Linux. In gedit (=Texteditor) ist der Newline NICHT vorhanden. Beim Einlesen mit Java ist er da. Im ghex steht da ebenfalls ein newline, er wird also wohl von gedit verschluckt. Dann muss ich den wohl nach dem Einlesen noch rausfiltern.
 
Wenn in der Textdatei kein newline drin ist, ist auch keins drin.

Java:
StringBuilder sb2 = new StringBuilder("Hello World");
System.out.println(sb.toString().equals(sb2.toString()));

Ein einfacher Test zeigt, dass die zwei Strings ohne newline die gleichen sind.
 
Zuletzt bearbeitet:
Das liegt daran dass es gedit falsch anzeigt. Probiers doch mal umgedreht: Schreibe in Datei A "hallo" und in Datei B "hallo\n" und öffne beide mit gedit...

Ansonsten sei dir noch auf der Konsole "hexdump -C Dateiname" ans Herz gelegt.
 

Zurück
Oben