Textfiles laden - egal welches Encoding

Status
Nicht offen für weitere Antworten.

peez

Bekanntes Mitglied
Habe mir ein kleines Tool geschrieben, das mir einige Operationen auf Textfiles erlaubt, die ich öfters durchführen muss.

Jetzt war ich der Meinung, dass wenn ich die Encodings (UTF-8, ISO-8859-1, etc.) nicht explizit ändere, müsste doch eigentlich das selbe gespeichert werden was auch reinkam.

So lese ich eine Datei ein:

[highlight=Java]FileInputStream in = new FileInputStream(datei);
byte b[] = new byte[datei.length()];
in.read(b);
in.close();

String text = new String(b);
[/highlight]

Dann kommen beliebige Funktionen auf dem String text, z.B.

text = text.replace(":", ".");

Und jetzt wird wieder gespeichert:

[highlight=Java]
FileOutputStream out = new FileOutputStream(datei);
out.write(text.getBytes());
out.close();
[/highlight]

Leider bekomme ich bei UTF-8 Files nur Kauderwelsch an den Stellen mit Speziellen Zeichen raus.

Hab ich hier irgendwo einen Denkfehler?
 

Wildcard

Top Contributor
getBytes liefert die bytes im Standardencoding. Hängt also davon ab was das default encoding deines OS ist.

EDIT: und wenn du einen String aus bytes erzeugt wird ebenfalls das Standardencoding verwendet, wenn du keins angibst.
 

peez

Bekanntes Mitglied
Hmm... Gibts irgendeine andere Möglichkeit, das zu machen ohne sich um das Encoding kümmern zu müssen? (Die Operationen dazwischen passieren sowieso nur auf Standard-Zeichen).
 

Wildcard

Top Contributor
Nein. Du brauchst ein Encoding wenn du Strings einlesen und rausschreiben willst. Wenn du nur sehr einfache Operationen durchführen willst, kannst du direkt auf den bytes Arbeiten, aber um aus bytes einen String zu bauen müssen die bytes nunmal anhand eines Encodings interpretiert werden.
 
S

Spacerat

Gast
Weniger Schwierigkeiten beim lesen von reinen Textdateien hat man, wenn man FileReader statt FileInputStream verwendet. Die Tatsache, das dort kein Encoding im Konstruktor übergeben werden kann lässt vermuten, das es automatisch erkannt wird. Würde dort Standard-Encoding verwendet, müsste man zumindest ein anderes übergeben können.
 
S

Spacerat

Gast
Wenn das so ist... genau...
Um das mal nach zu vollziehen...
[highlight=java]FileReader fi = new FileReader(datei);
char[] buf = new char[1024]; // Grösse beliebig veränderbar
int i;
Stringbuilder sb = new StringBuilder();
while((i = fi.read(buf, 0, buf.length)) != -1) sb.append(buf, 0, i);
String enc = fi.getEncoding(); // wieso existiert diese Methode?
// Wo doch standard verwendet wird? Was macht der StreamDecoder
// im FileReader? (Wenn der mal nicht versucht, das Encoding zu erkennen)
fi.close();
String text = sb.toString();
// Replacegeschichten...
FileWriter fo = new FileWriter(datei);
// fo.setEncoding(); // tja diese Methode gibts dagegen nicht. Seltsam.
// -> fo = OutputStreamWriter(new FileOutputStream(datei), enc); könnte helfen...
fo.write(text, 0, text.length());
fo.close();[/highlight]
 
Zuletzt bearbeitet von einem Moderator:
S

Spacerat

Gast
Vielleicht einfach mal Doku lesen?
Das kommt erst, bevor es ausartet -> Decompile, Nervpost. :)
Durch das Nachvollziehen bin ich nun nicht nur darauf gekommen, dass wahrhaftig das Standard-Encoding verwendet wird, sondern auch darauf, das man vom FileReader bzw. FileWriter jeweils eine Klasse höher (InputStreamReader und OutputStreamWriter) gehen kann, und dort das Encoding vorgeben kann. So z.B. auch "UTF-8". Damit kann die Datei nun z.B. in ein CharBuffer gelesen werden, wo sie nach belieben untersucht und geändert werden kann. Wenn man Glück hat (bei HTML, XML usw.), kann man so nun auch erkennen, welches Encoding in der Datei verwendet wird und den CharBuffer aufgrund dieser Infos behandeln.
@peez: Das Paket hab' ich mir mal runtergeladen. Auf den ersten Blick könnte das was werden. Der beruht anscheinend auf "irgendwelchen" "Guess-Content-Tests". Die Ergebnisse sind also nicht 100%ig. Wenn man mit dem obigen Vorschlag also kein Glück hat, ruhig ausprobieren.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Datenbank - Textfiles - Anderes Allgemeine Java-Themen 34
O Zeile eines Textfiles löschen Allgemeine Java-Themen 2
G Thread zum Inhaltslöschen eines Textfiles. Wie? Allgemeine Java-Themen 4
O Maven ein externes jar laden ohne die Applikation neu zu kompilieren Allgemeine Java-Themen 4
F Laden von bestimmten Daten aus TAR Archiv Allgemeine Java-Themen 23
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
Tobero .jar Dateine aus einem Ordner laden (Java 16) Allgemeine Java-Themen 5
yakazuqi Fehler beim Laden. JDA (Java Discord API) Allgemeine Java-Themen 1
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
C Wav-Datei aus Jar laden? Allgemeine Java-Themen 11
H Objekte speichern und laden Allgemeine Java-Themen 10
H Objekte speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
F Arraylist vollständig abspeichern und laden Allgemeine Java-Themen 1
T Compiler-Fehler NoClassDefFoundError beim Laden einer Class Allgemeine Java-Themen 11
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
H Laden einer (Resourcendatei) aus einem Jar-File Allgemeine Java-Themen 17
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
Developer_X Website HTML Code von HTTPS URL laden Allgemeine Java-Themen 0
L Seite einer Partner Website neu laden Allgemeine Java-Themen 1
RalleYTN Audiolänge einer MP3 Datei erhalten ohne diese vollständig zu laden Allgemeine Java-Themen 15
S Maven Jars dynamisch laden / Plugin-Struktur erstellen Allgemeine Java-Themen 14
X Klassen aus jar in jar Laden Allgemeine Java-Themen 1
X Mehrere booleans in Datei Speichern, Updaten und Laden Allgemeine Java-Themen 1
L Mapdaten laden Allgemeine Java-Themen 10
B Aktuellen Sourcecode aus Browser laden Allgemeine Java-Themen 43
HoloYoitsu Kann .dll nur aus Eclipse heraus laden Allgemeine Java-Themen 7
F Teil eines Bildes laden Allgemeine Java-Themen 1
L JavaFX JavafX externe FXML laden? Allgemeine Java-Themen 4
M Eine Datei im Speicher erneut laden(?) Allgemeine Java-Themen 1
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Allgemeine Java-Themen 3
S Allgemeine parallelisierte Loesung um Daten im Hintergrund zu laden..? Allgemeine Java-Themen 6
F Java Native/Shared Library (.so) laden macht Probleme Allgemeine Java-Themen 3
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
V Input/Output Gif Bilder Animiert aus einer Jar laden Allgemeine Java-Themen 4
V Input/Output Swing Icons in Jar Archiv laden Allgemeine Java-Themen 10
C BufferedImages in Jar laden. Allgemeine Java-Themen 1
G StackoverflowError beim laden einer FXMML Datei Allgemeine Java-Themen 1
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
J Arraylist speichern und laden? Allgemeine Java-Themen 5
S Applet in html laden; InvocationTargetException,.. nur warum ? Allgemeine Java-Themen 0
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
A Anderes Fenster neu laden Allgemeine Java-Themen 16
N Daten aus Jar laden Allgemeine Java-Themen 10
N Klasse via ClassLoader laden Allgemeine Java-Themen 2
antonbracke Aus Jar eine Class laden und damit arbeiten! Allgemeine Java-Themen 5
K Input/Output Daten speichern / laden Allgemeine Java-Themen 2
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
A mit getClassLoader Bild laden Allgemeine Java-Themen 8
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
G Native Library / Fehler beim Laden der .so/.dll Datei Allgemeine Java-Themen 17
antonbracke Klassen Klassen gegenseitig laden Allgemeine Java-Themen 4
K Input/Output Im Programm instanzierte Objekte Speichern und laden Allgemeine Java-Themen 3
T Java Klassen aus externer .jar laden und ausführen Allgemeine Java-Themen 3
P Textdatei aus Ressourcen laden. Allgemeine Java-Themen 8
R Java Array speichern & laden Allgemeine Java-Themen 23
N Input/Output Bild von WebSite laden? Allgemeine Java-Themen 3
G Interface Laden der Konfiguration über Interfaces sinnvoll? Allgemeine Java-Themen 28
Z Bilder aus JAR laden Allgemeine Java-Themen 2
D Ressourcen(config) laden Allgemeine Java-Themen 11
J Laden von JAR Files geht ohne ADMIN Rechte sehr langsam Allgemeine Java-Themen 6
S IMAGE ARRAY laden Allgemeine Java-Themen 6
J Methoden Fehler beim serialisieren und laden!? help Allgemeine Java-Themen 4
Grejak 2D-Grafik Resourcen laden Allgemeine Java-Themen 4
firefexx ResourceBundle laden Allgemeine Java-Themen 2
V Klassen in "abgeschirmten Bereich" laden? Allgemeine Java-Themen 7
I bibliotheken nur via kommandozeile laden Allgemeine Java-Themen 16
U Classpath DLLs mittels System.load() laden: Allgemeine Java-Themen 6
F Vierdimensionellen String Array speichern/laden Allgemeine Java-Themen 5
T Api in Quellcode laden Allgemeine Java-Themen 8
O Jar und Iconbild laden Allgemeine Java-Themen 19
A Problem mit Bilder laden mit sum.kern Allgemeine Java-Themen 9
F Laden von externen Bibliotheken Allgemeine Java-Themen 3
hdi Ressourcen dynamisch zur Laufzeit laden Allgemeine Java-Themen 15
P Laden von Dateien mit und ohne JavaWebStart Allgemeine Java-Themen 3
I HTML Seite laden Allgemeine Java-Themen 6
A Klassen dynamisch aus jar-datei laden Allgemeine Java-Themen 5
D Bilder aus externer .jar laden Allgemeine Java-Themen 3
reibi Files über Classpath laden Allgemeine Java-Themen 22
S Dynamisches Manipulieren/Laden von Klassen Allgemeine Java-Themen 4
M Klasse aus xyz.class Datei laden / package entfernen? Allgemeine Java-Themen 4
multiholle Resourcen aus Jar-Archiv laden Allgemeine Java-Themen 5
F Bild aus externer Quelle laden und Skalieren? Allgemeine Java-Themen 11
hdi Kann Substance LAF nicht laden Allgemeine Java-Themen 3
T Eclipse Dateien einzeln aus einem Verzeichnis laden! Allgemeine Java-Themen 6
H Extra-Thread sinnvoll für XML-Datei laden? Allgemeine Java-Themen 4
T Class-files zur Laufzeit zu Reflection-Zwecken laden Allgemeine Java-Themen 18
SuperSeppel13 Bilder auf Anfrage laden - Threading Allgemeine Java-Themen 3
Developer_X Aus Datei in Arrays laden-Problem Allgemeine Java-Themen 5
L Applet immer wieder neu laden - Problem Allgemeine Java-Themen 25
N Klassen laden Allgemeine Java-Themen 5
Developer_X Java Applet - Font aus datei laden Allgemeine Java-Themen 15
N Speichern und laden in XML nicht via JAXB Allgemeine Java-Themen 4
F Klasse ohne voll qualifizierenden Namen laden Allgemeine Java-Themen 5
O Große Anzahl Bilder laden Allgemeine Java-Themen 7
S Bilder aus jarDateien laden Allgemeine Java-Themen 13
N verschiedene Klasse laden (Designfrage) Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben