line.separator: Problem beim Lesen einer Datei

Status
Nicht offen für weitere Antworten.

mAkL

Mitglied
Moin.

Ich möchte die folgende Textdatei "test.txt" unter Windows und Linux lesen.

Java:
a
b
Das Zeilenende in "test.txt" ist durch CR LF markiert (Windows), file.encoding ist "cp1252". Genauer stehen in der Datei die Hex-Werte 61 0D 0A 62.
Zum Auslesen benutze ich folgenden Code:

Java:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {

  public static void main(String[] args) throws IOException {

    BufferedReader br = new BufferedReader(new InputStreamReader(
        new FileInputStream("test.txt"), "cp1252"));
    int i;
    while ((i = br.read()) != -1) {
      System.out.println(i);
    }
  }
}

Unter Windows erhalte ich:

Java:
C:>java Test
97
13
10
98

Unter Linux:

Java:
foo@bar> java Test
97
10
98

Meine Frage: Gibt es eine Möglichkeit, den Reader so zu verändern, daß er unter Linux die Integer-Werte 13 und 10 für den Zeilenumbruch liefert?
Anmerkung: Was ich nicht ändern kann, ist das zeichenweise Auslesen der Datei mittels br.read().

Grüße, mAkL
 
Zuletzt bearbeitet:
S

SlaterB

Gast
ich erhalte unter Ubuntu auch
97
13
10
98
wenn ich die Datei von Windows rüberkopiere
 

Der Müde Joe

Top Contributor
>Integer-Werte 13 und 10 für den Zeilenumbruch liefert?

Meinste sowas?
Java:
System.out.println((char)97);
System.out.println((char)13);
System.out.println((char)97);
 

mAkL

Mitglied
ich erhalte unter Ubuntu auch
97
13
10
98
wenn ich die Datei von Windows rüberkopiere

Das ist ja interessant! Was liefert dir denn ein
[c]System.out.println(System.getProperty("line.separator").length());
[/c] unter Ubuntu? Sollten das zwei Zeichen sein, bleibt die Frage, an welcher Stelle man diese Systemeigenschaft ändern kann. Ich dachte schon an
Code:
System.setProperty("line.separator", "\r\n");
, kann dabei aber nur Auswirkungen bei
Code:
System.out
feststellen und nicht bei den Readern.

>Integer-Werte 13 und 10 für den Zeilenumbruch liefert?

Meinste sowas?
Java:
System.out.println((char)97);
System.out.println((char)13);
System.out.println((char)97);

Nein, das Casten in einen Character hat mit meinem Problem nichts zu tun. Ich muß aus verschiedenen Gründen einen Reader benutzen, der ein Byte (also ein Zeichen) aus der Datei liest und mir dessen Integer-Repräsentation liefert. Bis auf den Zeilenumbruch funktioniert das auch. Findet der Reader im Beispiel oben jedoch unter Linux (bei mir läuft Debian) die Zeilenendezeichen von Windows, gibt er mir nur das eine Zeichen des Zeilenumbruchs von Unix. Für meine Anwendung ist das leider unbrauchbar.
 
S

SlaterB

Gast
> Was liefert dir denn ein System.out.println(System.getProperty("line.separator").length()); unter Ubuntu?

kann ich persönlich erst heute abend beantworten, vielleicht vorher wer anders

hast du die Datei aus dem Anhang probiert? auch mal nur per InputStream direkt Bytes laden, nicht chars?
was liefert File.length()? kann ja kaum sein, dass da ein char verloren geht
 
B

bygones

Gast
mal ne dumme frage:

warum nicht [c]br.readLine()[/c] und zeilenweise einlesen ?!
 

mAkL

Mitglied
>hast du die Datei aus dem Anhang probiert? auch mal nur per InputStream direkt Bytes laden, nicht chars?
was liefert File.length()? kann ja kaum sein, dass da ein char verloren geht

Ja, ich habe die Datei probiert. Gibt aber auch kein anderes Ergebnis.
Das mit dem direkten Lesen von Bytes hielt ich für aussichtsreich und habe daher meinen Test erweitert:

Java:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {

  public static void main(String[] args) throws IOException {

    BufferedReader br = new BufferedReader(new InputStreamReader(
        new FileInputStream("test.txt"), "utf-8"));
    int j;
    while ((j = br.read()) != -1) {
      System.out.println(j);
    }
	
    System.out.println("line.separator: "
	  + System.getProperty("line.separator").length() + " character(s)");
	  
    FileInputStream fis = new FileInputStream("test.txt");
	int i;
    while ((i = fis.read()) != -1) {
      System.out.println("byte value: " + i);
    }
  }
}

Ergebnis Windows:

Java:
C:>java Test
97
13
10
98
line.separator: 2 character(s)
byte value: 97
byte value: 13
byte value: 10
byte value: 98

Ergebnis Debian:

Java:
foo@bar> java Test
97
10
98
line.separator: 1 character(s)
byte value: 97
byte value: 10
byte value: 98
Und das verstehe ich nun wirklich nicht mehr... ???:L :bahnhof: Mit
Code:
fis.read()
lese ich doch byteweise, oder?

mal ne dumme frage:

warum nicht [c]br.readLine()[/c] und zeilenweise einlesen ?!

Das hängt mit meiner Anwendung zusammen. Ich implementiere kryptografische Methoden. Die Textdateien, die ich lesen will, sind also kein vernünftiger Text, sondern sehen eher so aus:

Java:
KY></37;5:;x??X/;/;3?/XQ/837±4#±Echchcht5;3ex8:/;3 /X<P3X83Q/;3:5eQ/8/83r;x3Q
/;3#5?og</;P3ax;3/m385Y>3/X8ixY>P3QX/chdn88/;3A583Q/83d/??/83Sg3<;
/88/83C?X<g8</;3xgY>3KY></3dn88/;3g8Q3dLmeX
;/mm/;ch:/8x88<Vl3KY></3dn88/;3o;5:;x??X/;</83#5?og</;P3g8Q3dLmeX
;/mm/;3eX/Z/83/mch,e/X,/8l3KX83/Y></;3#5?og</;
Jedes Zeichen in einer solchen Datei hat einen gewissen Informationsgehalt, auch ein CR bzw. ein LF. Es sind auch (andere) Steuerzeichen möglich (z.B. die Hex-Werte 00, 01, 02 usw.). Ich kann also nicht einfach mit [c]br.readLine()[/c] lesen und auf das eine oder andere Zeichen verzichten, das auf dem Weg bleibt. Es klappt auch (fast) alles wunderbar, die Zeichen CR und LF werden richtig verarbeitet, sofern sie nicht direkt aufeinander folgen. Wenn sie dies aber tun, dann sorgt irgendein Automatismus dafür, daß dieses Windows-Zeilenende in ein Unix-Zeilenende konvertiert wird. Und genau das ist meine Frage: Wie beeinflusse ich diesen Automatismus?
 
S

SlaterB

Gast
und was sagt das Dateisystem?
wird die Datei magisch kleiner, passt sie unter Linux auf eine CD, unter Windows aber nicht?
oder hast du doch zwei verschiedene Dateien, etwa weil sie unter jedem Betriebssystem erst neu erstellt werden,
dann ist der Schuld, der die Datei schreibt
 

mAkL

Mitglied
und was sagt das Dateisystem?
wird die Datei magisch kleiner, passt sie unter Linux auf eine CD, unter Windows aber nicht?
oder hast du doch zwei verschiedene Dateien, etwa weil sie unter jedem Betriebssystem erst neu erstellt werden,
dann ist der Schuld, der die Datei schreibt

:toll: Treffer. Schuld ist der, der ein Programm benutzt und dessen Einstellungsmöglichkeiten nicht gut genug kennt - also ich. Habe für den Transport von Windows nach Linux WinSCP benutzt. Wenn ich hier die Datei binär übertrage, läuft alles wie gewünscht. Wäre im Leben nicht darauf gekommen, daß dieses Programm bei der Übertragung die Zeilenendezeichen konvertiert. Dankeschön allen für die Hilfe :applaus:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Line Separator in ArrayList durch ";" ersetzen Java Basics - Anfänger-Themen 4
F System.getProperty("line.separator") funkt. nicht Java Basics - Anfänger-Themen 4
lougoldi Command Line Java Basics - Anfänger-Themen 9
A Java command line binding (library)? Java Basics - Anfänger-Themen 5
B cal4j - Error at line 1:Unexpected end of file Java Basics - Anfänger-Themen 0
M Erste Schritte Mehrere eingaben in einer Line vergleichen (if equals...) Java Basics - Anfänger-Themen 6
B Wieso wird die Zeile "column" genannt und die Spalte "line"? Java Basics - Anfänger-Themen 12
D Java-API mit Command Line Tool für Rasenroboter umsetzen Java Basics - Anfänger-Themen 10
K RegEx - Multiple Line Java Basics - Anfänger-Themen 3
B Quellcode einelsen "line by line" (und abspeichern in file (txt) Java Basics - Anfänger-Themen 7
D java.util.NoSuchElementException: No line found Java Basics - Anfänger-Themen 11
G No line found-Fehler bei Scanner Java Basics - Anfänger-Themen 7
F Line zeichnen und Werte ändern Java Basics - Anfänger-Themen 6
G PrintWriter each line möglich? Java Basics - Anfänger-Themen 4
Dogge Multiple markers at line 15 Java Basics - Anfänger-Themen 13
H Multiple Markers at this line Java Basics - Anfänger-Themen 3
D Scanner hasNext(Line)() Block Problematik... Java Basics - Anfänger-Themen 6
H Command Line in Java Java Basics - Anfänger-Themen 3
E line=In.readLine() Java Basics - Anfänger-Themen 2
M Einlesen von Binärdateien (binary interleaved by line) Java Basics - Anfänger-Themen 3
J NullPointerException line = br.readLine().length() Java Basics - Anfänger-Themen 9
K Anzahl Zeichenfolge in Line ermitteln Java Basics - Anfänger-Themen 3
A Line-Editor Java Basics - Anfänger-Themen 2
P "Line too long" bei der Generierung des jars. Java Basics - Anfänger-Themen 5
S Mit line.split() leider unterschiedliche Anzahl von Spalten Java Basics - Anfänger-Themen 19
R File.pathSeparator und File.separator Java Basics - Anfänger-Themen 46
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
K OOP File Separator Java Basics - Anfänger-Themen 7
R Zu blöd für System.getProperty(path.separator) ? Java Basics - Anfänger-Themen 3
G Separator Java Basics - Anfänger-Themen 3
G zeichen einlesen bis separator Java Basics - Anfänger-Themen 6
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
M Input/Output Fallunterscheidung Problem Java Basics - Anfänger-Themen 17
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben