Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

encoding beim Lesen ändern

0 views
Skip to first unread message

Michael Niedermair

unread,
Aug 13, 2003, 1:26:42 AM8/13/03
to
Hallo!

Ich lesen eine Datei zeilenweise mit einem LineNumberReader ein. Dabei wird
das encoding am Anfang auf iso-8859-1 gesetzt. Der Reader bekommt seine
Daten aus einen BufferedInputStream (fest, kann nicht geändert werden).
Nun soll ab einer bestimmten Zeile (wird durch eine spezielle Sequence
ausgelößt) das encoding (des Readers) geändert werden. (siehe
Minimalbeispiel)

Dazu schließe ich den Reader (nicht den BufferedInputStream) und öffne
diesen mit einem neuen encoding.
Klappt leider nicht!
Beim Lesen der Zeile 3 wird folgender Fehler geworfen.

java.io.IOException: Stream closed
at
java.io.BufferedInputStream.ensureOpen(BufferedInputStream.java:120)
at java.io.BufferedInputStream.read(BufferedInputStream.java:270)
at
sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:408)
at
sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:450)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:182)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.LineNumberReader.readLine(LineNumberReader.java:163)
at Test1.main(Test1.java:26)

Was kann ich machen?

Eine Notlösung wäre, sich die Zeilennummer zu merken, die Datei komplett zu
schließen, mit dem neuen encoding zu öffnen und x Zeilen neu einzulesen, um
bei der aktuellen Position zu sein. Gehts auch einfacher?

Gruss
Michael

---------------------------------------------
import java.io.*;

class Test1 {

public static void main (String[] args) {

try {

// BufferedInputStream ist vorgegeben!
BufferedInputStream bin = new BufferedInputStream(new
FileInputStream("test.in"),0x1000);

LineNumberReader in = new LineNumberReader(new
InputStreamReader(bin,"ISO-8859-1"));

// Zwei Zeilen lesen
String line1 = in.readLine();
String line2 = in.readLine();

System.out.println(line1);
System.out.println(line2);

// neues Encoding
in.close();
in = new LineNumberReader(new InputStreamReader(bin,"UTF-8"));

// nächste Zeile lesen
String line3 = in.readLine();

System.out.println(line3);

in.close();
bin.close();

} catch (Exception e) {
e.printStackTrace();
}
}
}
------------------------------------------

Ortwin Glück

unread,
Aug 13, 2003, 2:07:47 AM8/13/03
to

Michael Niedermair wrote:

> Hallo!
>
> Ich lesen eine Datei zeilenweise mit einem LineNumberReader ein. Dabei wird
> das encoding am Anfang auf iso-8859-1 gesetzt. Der Reader bekommt seine
> Daten aus einen BufferedInputStream (fest, kann nicht geändert werden).
> Nun soll ab einer bestimmten Zeile (wird durch eine spezielle Sequence
> ausgelößt) das encoding (des Readers) geändert werden. (siehe
> Minimalbeispiel)
>
> Dazu schließe ich den Reader (nicht den BufferedInputStream) und öffne
> diesen mit einem neuen encoding.
> Klappt leider nicht!
> Beim Lesen der Zeile 3 wird folgender Fehler geworfen.
>
> java.io.IOException: Stream closed

Ein LineNumberReader.close() schliesst auch den darunterliegenden
Stream. Schliesse den Reader einfach nicht, sondern wirf ihn einfach
weg. Lass also die Zeile in.close() einfach weg.

Michael Niedermair

unread,
Aug 13, 2003, 12:11:41 PM8/13/03
to
Ortwin Glück wrote:

Habe ich eben ausprobiert! Geht leider auch nicht. Jetzt kommt keine
Fehlermeldung mehr, aber er gibt mir bei Zeile 3 nur 'null' aus.

Noch ne Idee?

Gruss
Michael


0 new messages