Java Corner

Aus NoamikWiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

[Bearbeiten] English

This page and it's sub pages will be kind of a summary of hints, problems and solutions I had/found while developing with Java. My "Virtual Keyboard" project is a real challenge in terms of platform independence.

[Bearbeiten] Why not to use java.io.FileReader

A common task while writing programs is to read some data from an external file. Quick and dirty you could just do

 // BAD CODE FOR EDUCATIONAL PURPOSES, DON'T USE IT
 BufferedReader conf = new BufferedReader(new FileReader("myfile.txt"));
 String confLine     = conf.readLine();

The problem with this solution is: FileReader assumes that the default character encoding and the default byte-buffer size are appropriate. While this assumption might be true if you are just writing some lines of code for yourself, it might be false for nearly any other situation I can imagine. I do not want to repeat everything written about unicode, encoding and so on this page, so here is just the clean solution you should prefer:

 // GOOD CODE, USE THIS
 BufferedReader conf = new BufferedReader(new InputStreamReader(new FileInputStream("myfile.txt"),"UTF-8"));
 String confLine     = conf.readLine();

Of course you need to change UTF-8 to the encoding of the file you will be reading from. A similar problem will occur, if you print output onto the console or into a file. Please follow the link yourself to learn more about this topic.

[Bearbeiten] German

Diese Seite und ihre Unterseiten wird Hinweise, Probleme und Lösungen die ich beim Entwickeln mit Java hatte bzw. fand. Mein "Virtuelle Tastatur" Projekt stellt eine besondere Herausforderung in Sachen Plattformunabhängigkeit da.

[Bearbeiten] Warum man java.io.FileReader nicht benutzen sollte

Eine häufige Aufgabe beim Schreiben eines Programms ist das Lesen aus einer Datei. Quick and Dirty könnte man einfach folgenden Code verwenden:

 // SCHLECHTER CODE ZU SCHULUNGSZWECKEN, NICHT VERWENDEN
 BufferedReader conf = new BufferedReader(new FileReader("myfile.txt"));
 String confLine     = conf.readLine();

Das Problem dieser Variant ist: FileReader setzt voraus, dass die Standardcodierung des Systems sowie die Puffergröße der zu lesenden Datei angemessen sind. Diese Voraussetzung wird vielleicht zutreffen, wenn man Einmalcode zum eigenen Gebrauch schreibt, in nahezu jeder anderen mir vorstellbaren Situation passt diese Annahme aber nicht. Wer des Englischen mächtig ist, kann gerne den kompletten Artikel zu Unicode und Charakter-Encoding in Java lesen, im Folgenden einfach die saubere Lösung:

 // GUTER CODE, DEN DARF MAN VERWENDEN
 BufferedReader conf = new BufferedReader(new InputStreamReader(new FileInputStream("myfile.txt"),"UTF-8"));
 String confLine     = conf.readLine();

Natürlich muss UTF-8 an die tatsächliche Kodierung der Datei angepasst werden. Das gleiche Problem trifft ein übrigens analog, wenn man in eine Datei schreibt oder Ausgaben auf die Konsole macht. Auch hier sollte man sichere Ausgaben verwenden und die Kodierung festlegen.

Persönliche Werkzeuge