Speichern einer Datei in UTF-16

  • Themenstarter Gelöschtes Mitglied 12486
  • Beginndatum
G

Gelöschtes Mitglied 12486

Gast
Hallo,

ich habe einen kleinen Editor gebastelt, welcher eine bestimmte Art von Textdatei einliest und auf Fehler prüfen kann. Die Fehler können dann im Editor direkt behoben werden.

Wie gesagt liegt die Textdatei in einer UTF-16 Kodierung vor. Ich lese die Datei dann folgendermaßen ein:
Java:
in = new LineNumberReader(new InputStreamReader(new FileInputStream(file), "UTF-16"));
String input = null;
while ((input = in.readLine()) != null) {...}

Ich durchlaufe die Datei dann per while-Schleife und prüfe per if-Abfragen ob das vorliegende Format der bestimmten Zeilen korrekt ist. Nicht schön, aber funktioniert :)

Ich speichere die Datei nach der Bearbeitung folgendermaßen ab:

Java:
public void saveTextGrid() {
        exec.execute(new Runnable() {
            public void run() {
                if (fileChooser != null) {
                    int retValue = fileChooser.showSaveDialog(DesktopApplication1.getApplication().getMainFrame());
                    if (retValue == JFileChooser.APPROVE_OPTION) {
                        MySplitPane pane = (MySplitPane) jTabbedPane1.getSelectedComponent();
                        String text = pane.getTextgridPanel().getText();
                        try {
                            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileChooser.getSelectedFile()), "UTF-16"));
                            out.write(text.toCharArray());
                            out.flush();
                            out.close();
                            pane.getTextgridPanel().setTextChanged(false);
                            pane.getTextgridPanel().setFile(fileChooser.getSelectedFile());
                            pane.getTextgridPanel().readTextWithFileChannel(fileChooser.getSelectedFile());
                        } catch (IOException ex) {
                            ex.printStackTrace();
                        }
                    }
                }
            }
        });
    }

Mein Problem besteht nun darin, dass ich anscheinend etwas beim Speichern der korrigierten Datei falsch mache. Ich weiß jedoch noch nicht genau was. Wenn ich die Datei nun im Editor anzeige (in einer JTextArea), dann sehe ich in Zeile 1 folgendes(ohne äußere ""):

Java:
File type = "ooTextFile"

Wenn ich mir die Datei jedoch per System.out.println() in der Konsole ausgeben lasse, so steht in der ersten Zeile etwas wie das hier:

Java:
"````File type = "ooTextFile""

Es tauchen diese Punkte/Striche/Apostrophe vor der ersten Zeile auf, was natürlich meine einfach gestrickte if-Abfrage aushebelt, da diese nur auf den Zeilenanfang schaut. Somit wird die Zeile nicht mehr korrekt geprüft.

Wie entstehen nun diese komischen Zeichen in der ersten Zeile? Meine Vermutung ist, dass die Anzahl der Striche etwas mit der Anzahl der Speichervorgänge zu tun hat, aber so richtig reproduzieren konnte ich das auch nicht. Hat jemand eine Idee woher das kommt?

edit:

Durch das Erstellen dieses Posts hab ich nun gesehen, dass es sich um dieses Zeichen handelt. Kann mir jemand erklären wie das an den Anfang meiner Datei gelangt?

Ich habe den Speichervorgang mittlerweile so abgeändert, dass die Zeichen in einer For-Schleife einzeln in die Datei geschrieben werden und nicht in einer Zeile per out.write(text.toCharArray());. Jedoch macht das keinen Unterschied.

Gruß
huetz
 
Zuletzt bearbeitet von einem Moderator:

Atze

Top Contributor
woher sie kommen kann ich dir nicht sagen, aber vielleicht kannst du als krücke erstmal replaceAll("\uFEFF","") drüberlaufen lassen, bist du weißt wie du das verhinderst! ist nicht schön, aber dann sind sie wenigestens erstmal weg!
 
G

Gelöschtes Mitglied 12486

Gast
Danke für den Tip mit dem Replace, ich werde es zur Not so machen :)

Ich habe mir nun ein paar mal die Textdateien ausgegeben und dabei bemerkt, dass anscheinend nicht das Speichern, sondern das Öffnen der Datei zu dem unerwünschten Zeichen führt. Ich öffne die Datei, in dem ich erst per JFileChooser die Datei auswähle und an das anzuzeigende Panel übergebe. Dieses speichert in seiner Initialisierung die Datei als File erstmal und startet dann die Methode readTextWithFileChannel(File file).

Java:
public void openTextGrid() {
        exec.execute(new Runnable() {
            public void run() {
                if (fileChooser != null) {
                    fileChooser.setDialogTitle("choose a textgrid...");
                    fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
                    int retValue = fileChooser.showOpenDialog(DesktopApplication1.getApplication().getMainFrame());
                    if (retValue == JFileChooser.APPROVE_OPTION) {
                        String filename = fileChooser.getSelectedFile().getName();
                        MySplitPane split = new MySplitPane(new TextgridPanel(fileChooser.getSelectedFile()));
                        jTabbedPane1.add(filename, split);
                    }
                }
            }
        });
    }

Hier die Methode readTextWithFileChannel(File file):

Java:
protected void readTextWithFileChannel(File file) {
        long start = 0, end = 0;
        try {
            start = System.currentTimeMillis();
            FileChannel inChannel = new FileInputStream(file).getChannel();
            ByteBuffer buf = ByteBuffer.allocate(8192);// 8K

            Document doc = textArea.getDocument();
            String temp = null;

            while (inChannel.read(buf) != -1) {
                temp = ((ByteBuffer) (buf.flip())).asCharBuffer().toString();
                doc.insertString(doc.getLength(), temp, null);
                buf.clear();
            }
            textArea.setDocument(doc);
            setTextChanged(false);
            inChannel.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            end = System.currentTimeMillis();
        }
        long time = (end - start);
        System.out.println("Datei \"" + file.getAbsolutePath() + "\" geöffnet, " + time + " ms");
    }

Die Vermutung liegt nah, dass ich irgendwas bei der Verwendung des FileChannels falsch mache. Jedoch hab ich natürlich keine Ahnung was das sein könnte :) Ich verwende diese Methode die Datei zu öffnen, da ich gelesen habe, dass sie schneller sein soll als die herkömmliche Methode per Stream. Zur Not kann ich aber auch darauf zurück wechseln.

Hat dazu jemand eine Idee wie die Zeichen in den Text kommen?
 

KrokoDiehl

Top Contributor
Was ich bei der Methode die einliest, nicht finde, ist die Zeichenkodierung. Auch wenn die Datei selbst in UTF-16 vorliegt würde ich spontan darauf tippen, dass der FileInputStream (Zeile 5 im geposteten Code) eine andere Kodierung nimmt, z.B. den Systemstandard.
Hier würde ich also mal probieren die Kodierung anzugegeben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
K Input/Output String aus einer Datei einlesen und in anderer Datei speichern Allgemeine Java-Themen 20
R Per for schleife string propertys in einer datei speichern Allgemeine Java-Themen 15
F Probleme beim speichern einer xml datei mit jdom Allgemeine Java-Themen 5
B Speichern von Strings in einer txt-Datei Allgemeine Java-Themen 3
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
3 OOP Instanzen aus einer Klasse persistent speichern. Allgemeine Java-Themen 9
H Eclipse x Stellen einer Zahl in array speichern Allgemeine Java-Themen 3
SexyPenny90 Spalte einer Exceldatei in einem String speichern Allgemeine Java-Themen 11
G Daten aus einer For Schleife zwischen speichern Allgemeine Java-Themen 4
A Wie kann ich Methodennamen in einer Hashmap speichern Allgemeine Java-Themen 6
M Einstellung einer Applikation speichern? Allgemeine Java-Themen 8
OnDemand Zugangsdaten externer Systeme sicher speichern Allgemeine Java-Themen 8
Z Passwort Versuche speichern Allgemeine Java-Themen 8
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
8u3631984 Bilder in Datenbank speichern - sinnvoll Allgemeine Java-Themen 5
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
killig Textdatei einlesen und in HashMap speichern (duplikate entfernen) Allgemeine Java-Themen 12
N zweidimensionalen Array in dreidimensionalen Array speichern Allgemeine Java-Themen 4
temi Lösung zum Speichern von Deltafiles Allgemeine Java-Themen 6
J Java Filechooser Speichern Allgemeine Java-Themen 8
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
platofan23 Wie .txtDatei im Java Eclipse-Projekt bzw. in der Jar speichern? Allgemeine Java-Themen 7
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
S Swing Speichern nach Button-Klick Allgemeine Java-Themen 5
H ArrayListe in CSV Datei speichern Allgemeine Java-Themen 6
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
T Speichern von Objekten Allgemeine Java-Themen 2
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
D .txt Datei in .jar Datei speichern Allgemeine Java-Themen 3
M Key-File im selben Ordner speichern? Allgemeine Java-Themen 18
Aruetiise Funktion(y = mx+n) in String speichern und berechnen Allgemeine Java-Themen 9
S Eindimensionales Array in zweidimensionales Array speichern Allgemeine Java-Themen 5
offi Excel mit Inhalten aus DB öffnen ohne zu speichern Allgemeine Java-Themen 8
MiMa Speichern von Programmeinstellungen in Datei Allgemeine Java-Themen 7
F Best Practice Große Anzahl an Objekten speichern und lesen Allgemeine Java-Themen 19
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
@SupressWarnings() Feste Kosten speichern Allgemeine Java-Themen 4
N ZIp datei direkt im eclipse speichern Allgemeine Java-Themen 4
N Das Ende von bestimmten zeilen in text datei ändern und speichern Allgemeine Java-Themen 3
C Best Practice Speichern kleineren Mengen Stammdaten? Allgemeine Java-Themen 3
X Mehrere booleans in Datei Speichern, Updaten und Laden Allgemeine Java-Themen 1
F Json in sql speichern und lesen Allgemeine Java-Themen 10
F Alte Passörter mit Gson und Json in SQL speichern? Allgemeine Java-Themen 5
K API-Key sicher speichern Allgemeine Java-Themen 2
K Große Mengen an Daten speichern Allgemeine Java-Themen 9
B Zahlen manuell eingeben und in Array Speichern Allgemeine Java-Themen 2
Tacofan Bilder in Resource speichern Allgemeine Java-Themen 6
C Objekte in Array List speichern? Allgemeine Java-Themen 1
OnDemand Objekte speichern Allgemeine Java-Themen 8
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
J Text lesen und in Variablen speichern Allgemeine Java-Themen 3
U Variablen Stringarrays mit wenig verschiedenen Zeichen effizienter speichern Allgemeine Java-Themen 10
HarleyDavidson Input/Output Heruntergeladene Datei direkt nach dem Download öffnen ohne zu speichern Allgemeine Java-Themen 1
J Daten persistent speichern Allgemeine Java-Themen 14
S JavaMail - MailSubject,MailFrom,MailDate in String Array speichern NullPointerException Allgemeine Java-Themen 2
R HtmlUnit: Canvas als Bild speichern Allgemeine Java-Themen 0
E KeyCode in anderer Klasse speichern Allgemeine Java-Themen 2
M YouTube-Video herunterladen und speichern Allgemeine Java-Themen 10
C Position speichern von verschiebbaren Elementen auf JPanel Allgemeine Java-Themen 3
S Wertepaar in LinkedList/PriorityQueue speichern Allgemeine Java-Themen 3
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
J Arraylist speichern und laden? Allgemeine Java-Themen 5
S speichern von RSA-Keys Allgemeine Java-Themen 1
GUI-Programmer Mp3 Dateien bearbeiten und speichern Allgemeine Java-Themen 3
G Suchweg durch Binärbaum speichern Allgemeine Java-Themen 4
D IP-Cam live stream speichern Allgemeine Java-Themen 9
javampir Lange Bitfolge speichern Allgemeine Java-Themen 3
M Methoden in Rescources speichern Allgemeine Java-Themen 4
L iText PDF-Generierung ohne Speichern Allgemeine Java-Themen 10
U Screenshot erstellen und speichern Allgemeine Java-Themen 6
OnDemand Input/Output Variablen in Datei Speichern um sie wieder auszulesen Allgemeine Java-Themen 4
M Werte aus DB in Liste speichern ohne mehrfach speicherung Allgemeine Java-Themen 18
S XML lesen, verarbeiten, speichern klappt in Eclipse, aber nicht in der JAR Allgemeine Java-Themen 4
H JPA (EclipseLink) Neuer Eintrag in Collection speichern (unidirektional) Allgemeine Java-Themen 3
J RC4 Key als String speichern? Allgemeine Java-Themen 5
F Java Api Bilder speichern Allgemeine Java-Themen 3
T UTF-16LE String aus LDAP lesen und als ISO-8859-1 in DB speichern? Allgemeine Java-Themen 2
M Einstellungen in JAR speichern Allgemeine Java-Themen 8
F Problem beim Speichern eines Attachments Allgemeine Java-Themen 3
K Input/Output Daten speichern / laden Allgemeine Java-Themen 2
M Best Practice: Daten aufnehmen-speichern-bereitstellen Allgemeine Java-Themen 8
D Variablen zur Laufzeit global speichern (Registry Pattern?) Allgemeine Java-Themen 6
B Effizienteres Speichern von Worten Allgemeine Java-Themen 4
Z Design um boolsche ausdrücke zu speichern & auszuwerten Allgemeine Java-Themen 3
M Instanzierte Objekte in XML Dokument speichern Allgemeine Java-Themen 3
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
M Aus Excel Tabelle lesen und Werte in Array speichern Allgemeine Java-Themen 15
P Objekt Array in Datei Speichern Allgemeine Java-Themen 3

Ähnliche Java Themen


Oben