Unicode aus Textdatei einlesen und wieder abspeichern

Status
Nicht offen für weitere Antworten.

saxman

Mitglied
Hallo,

Ich habe ein Programm geschrieben, das Text aus einer Datei liest und diesen in einer anderen Datei abspeichert.

Nun habe ich das Problem, dass "ä", "ö" oder "ü" nur als "?" erscheinen, wenn ich die neue Datei später öffne.

Hat jemand eine Idee, wie man beim Einlesen (Ich vermute, dass dort der Fehler liegt...) darauf achten kann, dass auch Unicoder Zeichen eingelesen werden?

----------

Näheres zum Programm:
Die Datei wird byte für byte ausgelesen, zum char gecastet und dann einem String angehängt, der den gesamten Inhalt der Datei repräsentiert.


Schonmal im Voraus Danke für eure Antworten.

Saxman
 

Ark

Top Contributor
Aua. :autsch:

Das hört sich nach einer super schlechten Programmierung an. Ich meine das damit nicht in Bezug auf Unicode oder so, aber bei „und dann einem String angehängt“ wird mir leicht übel. -.-

Wie bzw. gibst Du denn den Inhalt der Datei aus, dass Du weißt, dass sie nur Fragezeichen an den bestimmten stellen enthält?

MfG
Ark
 

saxman

Mitglied
Hallo,

Hier mal der Quellcode. Dann könnt ihr selbst ein Bild davon machen wie "schlecht" er ist.

Code:
-----------
package demo;

import java.io.IOException;

import vok.*;

public class VoabelTauscherDemo {

	public static void main(String[] args) {
		try {
			Vokabeltauscher.tausche("Data/Vokabeln.txt" , "Data/VokabelnEdit.txt");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

--------------------------
package vok;

import java.io.*;
import java.util.*;

public class Vokabeltauscher {
	
	public static void tausche(String dateiNameAlt, String dateiNameNeu) throws IOException{
		String dateiAlt = leseAusDatei(dateiNameAlt);
		String first = "";
		String second = "";
		PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(dateiNameNeu)));

		Scanner scannerOne = new Scanner(dateiAlt);
		do{
			String line = scannerOne.nextLine();
			Scanner scannerTwo = new Scanner(line).useDelimiter(";");
			first = scannerTwo.next();
			second = scannerTwo.next();
			out.println(first+";"+second);
			out.println(second+";"+first);
			scannerTwo.close();
		}while (scannerOne.hasNextLine());
		
		scannerOne.close();
		out.close();
	}
	
	private static String leseAusDatei(String dateiName) throws IOException{
		FileInputStream leseStrom = new FileInputStream(dateiName);
		String dateiAlt = "";
		byte zeichen;
	    do{
	        zeichen = (byte)leseStrom.read();
	        if(zeichen != -1){
	          dateiAlt += (char)zeichen;
	        }
	      }while(zeichen != -1);
	    leseStrom.close();
	    return dateiAlt;
	}
	
}

mfg
saxman
 

saxman

Mitglied
Hallo,

Habe ich vergessen zu erwähnen: DIe Textdateien öffne ich mit dem Standard Texteditor von Windows.

mfg
Saxman
 

Ark

Top Contributor
Hm, ich erwartete jetzt einen schlimmen Quelltext, aber der hier ist viel schlimmer! :shock: (Nicht ärgern; Anfängerfehler und Kinderkrankheiten hat jeder von uns schon durchgemacht. ;) )

Verwende zum Einlesen unbedingt einen Reader! Tipp: Versuche mal, die Lese- und Schreibvorgänge in nur einer einzigen Schleife zu erledigen. Wenn Du wie genannt einen Reader einsetzt, ist das recht einfach. ;)

Ansonsten sind da tatsächlich noch einige Ungereimtheiten, was z. B. die Verwendung von Strings hier angeht usw., aber das ist erst einmal Nebensache. (Trotzdem wundert es mich, dass der Speicher noch nicht explodiert ist.)

MfG
Ark
 

saxman

Mitglied
Hallo,

Das mit dem Reader werde ich jetzt mal ausprobieren. Danke schon mal für den Tipp.

Das Programm, dass ich oben gepostet habe, ist eher ein Test gewesen, um herauszufinden, ob meine Idee funktioniert.
Die Intention, die mich dazu getrieben hat, so ein Programm zu schreiben, ist folgende.

Ich habe vor in nächster Zeit einen Vokabeltrainer für den PC zu nutzen. Dieser kann Vokabeln aus Textdateien importieren.
Da ich nun jeweils Frage und Antwort zusätzlich noch vertauscht haben möchte, habe ich mir gedacht, so ein kleines Programm wäre doch ganz hilfreich.

Die Vokabeldateien sollten folgende Form haben:

Vokabeln.txt
--------------------------------
Auto;car
Mülleimer;bin
Haus;house
--------------------------------

Diese möchte ich jetzt so verändern, dass das hier entsteht:

VokabelnEdit.txt
--------------------------------
Auto;car
car;Auto
Mülleimer;bin
bin;Mülleimer
Haus;house;
house;Haus
--------------------------------

Um das Ganze zu testen habe ich eben diesen Code verfasst. Da die Dateien noch recht klein sind, ist mir wahrscheinlich auch noch kein Speicher um die Ohren geflogen. :roll:

Du meinst also ich soll eine Zeile der Datei einlesen, verändern, in die neue Datei speichern und dann erst die nächste Zeile auslesen?
-> natürlich mit einem Reader

mfg
Saxman :D :D :) :) :D :D :D
 

saxman

Mitglied
Hallo,

Ich habe meine Klasse jetzt so umgebaut:

Code:
package vok;

import java.io.*;
import java.util.*;

public class Vokabeltauscher {
	
	public static void tausche(String dateiNameAlt, String dateiNameNeu) throws IOException{
		String first = "";
		String second = "";
String line = "";
		PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(dateiNameNeu)));

		Scanner scannerOne = new Scanner(dateiNameAlt);
		do{
			line = scannerOne.nextLine();
			Scanner scannerTwo = new Scanner(line).useDelimiter(";");
			first = scannerTwo.next();
			second = scannerTwo.next();
			out.println(first+";"+second);
			out.println(second+";"+first);
			scannerTwo.close();
		}while (scannerOne.hasNextLine());
		
		scannerOne.close();
		out.close();
	}

}

Ich bekommen jedoch immer eine "NoSuchElementException". Woran kann das liegen?


mfg
Saxman
 

saxman

Mitglied
Hallo,

Eigentlich wollte ich ja noch weiter schreiben, aber irgendwie hat sich das Ganze von selbst verschickt.^^

Anfangs bin ich deinem Tipp nachgegangen das ganze mit einem Reader zu lösen. Hat auch wunderbar funktioniert.

Um das Problem mit dem Speicher zu umgehen, habe ich das ganze wieder verworfen, da ich in der API der Klasse "Scanner" entdeckt habe, dass ich dieser auch direkt die Datei übergeben kann.

Jetzt bekomme ich allerdings den oben schon genannten Fehler.

mfg
Saxman
 

saxman

Mitglied
Hallo,

Ok, habe das Problem jetzt selbst lösen können. Hier noch mal der Quellcode:

Code:
package vok;

import java.io.*;
import java.util.*;

public class Vokabeltauscher {
	
	public static void tausche(String dateiNameAlt, String dateiNameNeu) throws IOException{
		String first = "";
		String second = "";
		String line = "";
		PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(dateiNameNeu)));
		
		File file = new File(dateiNameAlt);
		Scanner scannerOne = new Scanner(file);
		do{
			line = scannerOne.nextLine();
			Scanner scannerTwo = new Scanner(line).useDelimiter(";");
			first = scannerTwo.next();
			second = scannerTwo.next();
			out.println(first+";"+second);
			out.println(second+";"+first);
			scannerTwo.close();
		}while (scannerOne.hasNextLine());
		
		scannerOne.close();
		out.close();
	}
}

Gibt es dazu noch irgendwelche Tipps, was ich noch verbessern kann?


mfg
saxman
 

Ark

Top Contributor
Hier meine Variante:
Code:
package vok;

import java.io.*;
import java.util.*;

public class Vokabeltauscher {
	
	public static void tausche(String dateiNameAlt, String dateiNameNeu) throws IOException{
		String first;
		String second;
		String line;
		int idx;
		PrintWriter out = new PrintWriter(
			new BufferedWriter(
				new FileWriter(dateiNameNeu)
			)
		);
		BufferedReader in = new BufferedReader(
			new InputStreamReader(
				new FileInputStream(dateiNameAlt)
			)
		);
		
		while((line = in.readLine()) != null){// keine do-while-Schleife nehmen!
			// jetzt das Semikolon suchen, ganz ohne Scanner ;)
			for(idx = 0;line.charAt(idx) != ';' && idx<line.length();idx++);
			
			first = line.substring(0,idx);
			second = line.substring(idx+1);
			
			out.print(first);
			out.print(";");
			out.println(second);
			out.print(second);
			out.print(";");
			out.println(first);
			// durch das Aufsplitten vermeidet man hier neue Strings
		}
		
		out.close();
		in.close();
	}
}
Man kann zwar noch ein wenig mehr rausholen, aber dann wird es ein wenig komplizierter. Ich habe diesen Code allerdings nie getestet. *g* Ich verstehe nur nicht, was es bringt, die Vokabeln in einer Datei doppelt aufzubewahren. ???:L

Bitte nicht über diese Formatierung beim Aufrufen der Konstruktoren für in und out wundern, das ist mein Stil. ^^

MfG
Ark

P.S.: Bitte die EDIT-Funktion verwenden und nicht jedes mal neu posten. ;)
 

saxman

Mitglied
Hallo,

Danke noch mal für deine Hilfe.

Jetzt habe ich nur noch zwei (eigentlich 3^^) "Metafragen", die mit meinem Programm nichts zu tun haben.

1. Wie nutzte ich die "Edit" Funktion?
2. Wie kann ich den Haken setzten, der den Thread als gelöst markiert?
3. Wo stelle ich solche Fragen?

mfg
saxman
 

Ark

Top Contributor
1.) Sieh Dich hier einfach ein wenig um, dann siehst Du bei jedem Deiner Beiträge noch einen Link zum „Editieren“. ;)
2.) Guck mal am Ende dieser Seite nach.
3.) Solche Fragen stellt man nicht; man weiß es einfach. *g* Ansonsten sollten die FAQ interessant sein. Und wenn das nicht hilft, fragst Du einen Mod oder Admin; zur Not machst Du einen Thread in der „Plauderecke“ auf.

MfG
Ark
 

saxman

Mitglied
Danke

Tut mir Leid...habe mich noch nicht so sehr mit den Funktionen dieses Forums beschäftigt und weiß daher noch nicht so sehr Bescheid... :oops:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Unicode-Textdatei lesen Java Basics - Anfänger-Themen 7
Salo Zusammengesetztes Unicode Java Basics - Anfänger-Themen 15
D Unicode im Hexadezimalsystem Java Basics - Anfänger-Themen 1
A Input/Output Input eingabe in unicode übersetzen Java Basics - Anfänger-Themen 3
F charAt-Methode liefert falsche Unicode-Werte Java Basics - Anfänger-Themen 8
U Unicode - ? Java Basics - Anfänger-Themen 3
P Zahlen als Unicode darstellen Java Basics - Anfänger-Themen 2
F Unicode beim Lesen und Schreiben per java.io.* Java Basics - Anfänger-Themen 9
0 "Invalid Unicode" Java Basics - Anfänger-Themen 2
M Import Unicode Textfile Java Basics - Anfänger-Themen 10
A Unicode Java Basics - Anfänger-Themen 3
K Java String UNICODE in DB UTF-8 Feld einfügen Java Basics - Anfänger-Themen 3
kulturfenster Char und Unicode Java Basics - Anfänger-Themen 2
H short in unicode umwandeln Java Basics - Anfänger-Themen 5
R Unicode-Wert in Binär und Dezimal umformen - kleines Problem Java Basics - Anfänger-Themen 1
G ASCII -> Unicode ? Java Basics - Anfänger-Themen 5
R Problem bei Ausgabe von Unicode-Zeichen Java Basics - Anfänger-Themen 6
B Unicode Java Basics - Anfänger-Themen 2
G Aus int das unicode char zeichen lesen Java Basics - Anfänger-Themen 3
D Unicode für mathematische/statistische Zeichen. Java Basics - Anfänger-Themen 3
T Textdateien mit Unicode-Zeichen kopieren Java Basics - Anfänger-Themen 2
D Unicode in Html Java Basics - Anfänger-Themen 4
I Probleme mit String Byte[] und Unicode Java Basics - Anfänger-Themen 15
R Unicode ausgeben: für b "u0062" ausgeben Java Basics - Anfänger-Themen 5
I Zahlen in Unicode konvertieren Java Basics - Anfänger-Themen 37
G mit Strings rechnen (Unicode) Java Basics - Anfänger-Themen 15
M Buchstabe zu Unicode Java Basics - Anfänger-Themen 3
M Byte InputStream zu Zeichenformat Unicode bzw String konvert Java Basics - Anfänger-Themen 5
S HTML Sonderzeichen in Unicode wandeln Java Basics - Anfänger-Themen 5
T Unicode StringBuffer -> String = unleserlich Java Basics - Anfänger-Themen 7
S HTML mit num. Unicode Notation (was:Probleme bei Encoding) Java Basics - Anfänger-Themen 7
G Unicode in Java Java Basics - Anfänger-Themen 2
H Leere Zeilen in Textdatei löschen lassen Java Basics - Anfänger-Themen 5
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
izoards Textdatei Human unreadable abspeichern Java Basics - Anfänger-Themen 17
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
LeoDerKek Textdatei in JAR-File Java Basics - Anfänger-Themen 4
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
3 Textdatei Zeilenweise auslesen Java Basics - Anfänger-Themen 3
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
NeoLexx Datenströme Lesen und Schreiben einer Textdatei Java Basics - Anfänger-Themen 2
D Input/Output Mehrzeiligen String aus Textdatei erstellen Java Basics - Anfänger-Themen 5
M Datenbank oder Textdatei? Java Basics - Anfänger-Themen 4
X Textdatei: zwei-zeilenweise gleiche Zeilen rausschmeißen Java Basics - Anfänger-Themen 21
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
J Wörter aus Textdatei suchen Java Basics - Anfänger-Themen 2
S Importieren einer Textdatei Java Basics - Anfänger-Themen 2
x-tshainge Innerhalb von Textdatei addieren Java Basics - Anfänger-Themen 9
Jinnai4 Werte in Textdatei ändern Java Basics - Anfänger-Themen 2
JDimi Textdatei mit beliebig vielen Zeilenumbrüchen erstellen Java Basics - Anfänger-Themen 2
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
G Wert in Textdatei ersetzen? Java Basics - Anfänger-Themen 2
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
C Input/Output Textdatei vom Java-Programm nicht geladen Java Basics - Anfänger-Themen 58
A Textdatei mit BufferedReader einlesen Java Basics - Anfänger-Themen 0
T Länge einer Textdatei Java Basics - Anfänger-Themen 11
S Übertragen einer Textdatei in ein 2d-Array Java Basics - Anfänger-Themen 2
N Integers aus Textdatei auslesen und mehrere Arrays erstellen Java Basics - Anfänger-Themen 9
T Textdatei öffnen und ans Ende scrollen Java Basics - Anfänger-Themen 11
J Textdatei filtern und bearbeiten Java Basics - Anfänger-Themen 1
C Textdatei oder doch eine Datenban Java Basics - Anfänger-Themen 15
J Input/Output Tilemap effizient speichern als Textdatei Java Basics - Anfänger-Themen 7
J Input/Output Zeile in Textdatei ändern Java Basics - Anfänger-Themen 14
M Textdatei(en) in .jar schreiben Java Basics - Anfänger-Themen 5
K Textdatei auslesen Java Basics - Anfänger-Themen 10
H Input/Output Inhalt einer GUI in Textdatei speichern Java Basics - Anfänger-Themen 1
K Erste Schritte Textdatei -> Array Java Basics - Anfänger-Themen 1
F Textdatei einlesen in ArryList (Objekte abspeichern?) Java Basics - Anfänger-Themen 4
F Problem mit Tabulatoren bei Zeilen zählen einer Textdatei Java Basics - Anfänger-Themen 17
G Erste Schritte Textdatei einlesen und in Array speichern Java Basics - Anfänger-Themen 5
F Textdatei einlesen und Zeilen zählen Java Basics - Anfänger-Themen 10
L Namen aus Textdatei auslesen Java Basics - Anfänger-Themen 1
E Textdatei kopieren funktioniert nicht Java Basics - Anfänger-Themen 12
M Zweidimensionales Array aus Textdatei gewinnen Java Basics - Anfänger-Themen 6
C Aus einer Textdatei Zahlen lesen mit Leerzeichen Java Basics - Anfänger-Themen 11
S Methoden Textdatei auslesen Java Basics - Anfänger-Themen 11
G Textdatei auf Dubletten prüfen Java Basics - Anfänger-Themen 8
T Textdatei Zeile löschen? Java Basics - Anfänger-Themen 4
T Textdatei beschreiben/bearbeiten Java Basics - Anfänger-Themen 4
S Textdatei einlesen und JFrame füllen Java Basics - Anfänger-Themen 14
C auslesen bestimmter werte einer textdatei und anschl. hineinschreiben in eine neue txt-datei. Java Basics - Anfänger-Themen 2
S Textdatei lesen, Methode gibt nur die letzte Zeile aus. Warum? Java Basics - Anfänger-Themen 5
C Einlesen in Array von Textdatei sehr langsam Java Basics - Anfänger-Themen 7
R Werte in eine Textdatei schreiben Java Basics - Anfänger-Themen 20
J Neue Zeile an bestimmter Stelle in Textdatei einfügen Java Basics - Anfänger-Themen 2
D Textdatei in geschachtelte Array speichern Java Basics - Anfänger-Themen 17
T Scanner für große Textdatei Java Basics - Anfänger-Themen 11
A Unterschied Textdatei und Quelltextdatei Java Basics - Anfänger-Themen 5
P Input/Output Textdatei einlesen - 1. Zeichen fehlt Java Basics - Anfänger-Themen 7
J Input/Output Textdatei in einer JAR lesen Java Basics - Anfänger-Themen 3
T Erste Schritte einzelne Wörter aus textdatei lesen... Java Basics - Anfänger-Themen 4
S Textdatei im Internet lesen und editieren Java Basics - Anfänger-Themen 2
J Textdatei einlesen und ausgeben - NullPointerException Java Basics - Anfänger-Themen 5
M Input/Output Objekte in einer Textdatei ablegen (Highscore) Java Basics - Anfänger-Themen 9
P CSV Daten in Textdatei Speichern Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben