Datei speichern erzeugt ungewollte UTF-Zeichen

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi,

ich habe eine HTML-Datei, in welche ich immer Ausgaben speichern möchte, wenn der User etwas klickt.

Code:
    private void saveItemActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try{
            DataOutputStream out = new DataOutputStream(
                                   new BufferedOutputStream(
                                   new FileOutputStream("solutions.html")));
            
            String outputText = solutionAreaPane.getText();
            outputText.replace("<html>","");
            outputText.replace("</html>","");
            Date date = new Date();
            SimpleDateFormat dateFormat = new SimpleDateFormat( "dd.MM.yy HH:mm" );
            outputText = "

<div align=\"right\">[i]" + dateFormat.format(date) + "[/i]</div><hr />" + outputText;
            
            out.writeUTF(outputText);
            out.close();
        }
        catch(IOException e) {
            System.err.println(e.toString());
        }
    }

Das funktioniert auch so wie es soll und gedacht war. Einziges Problem ist das er mir vor dem String den er speichern soll zusätzlich ein scheinbar zufälliges oder aus dem String errechnetes Symbol speichert. Dieses ist ganz am Anfang der Datei. Zb: å, ·, Ô oder Ó. Gleicher String = gleiches Symbol.

Was mache ich falsch?
 
G

Guest

Gast
Ich habe noch ein wenig herumgebastelt und nun sieht die Methode wie folgt aus:

Code:
 private void saveItemActionPerformed(java.awt.event.ActionEvent evt) {                                         
        String inputText= "";
        try{
            
            DataInputStream  in  = new DataInputStream(
                                   new BufferedInputStream(
                                   new FileInputStream("solutions.html")));
            
            inputText = in.readUTF();
            
        }
        catch(IOException e) {
            System.err.println(e.toString());
        }
        try{         
            DataOutputStream out = new DataOutputStream(
                                   new BufferedOutputStream(
                                   new FileOutputStream("solutions.html")));
            
            String outputText = inputText;
            Date date = new Date();
            SimpleDateFormat dateFormat = new SimpleDateFormat( "dd.MM.yy HH:mm" );
            outputText = outputText + "

<div align=\"right\">[i]" + dateFormat.format(date) + "[/i]</div><hr />" + solutionAreaPane.getText();
            outputText.replaceAll("<html>","");
            outputText.replaceAll("</html>","");
            outputText.replaceAll("<head>","");
            outputText.replaceAll("</head>","");
            outputText.replaceAll("<body>","");
            outputText.replaceAll("</body>","");
            
            out.writeUTF(outputText);
            out.close();
            
            JOptionPane.showMessageDialog(null, Main.langGet("saveSuccess") + System.getProperty("user.dir"));
        }
        catch(IOException e) {
            System.err.println(e.toString());
        }
    }

Das Problem von oben besteht weiterhin. Im moment habe ich zum Beispiel ein £-Zeichen.

Allerdings habe ich auch gemerkt das das replaceAll nichts macht. Was ist daran falsch? Es führt nichts aus.
 
G

Guest

Gast
Ich idiot -.-

Code:
            outputText = outputText.replaceAll("<html>","");
            outputText = outputText.replaceAll("</html>","");
            outputText = outputText.replaceAll("<head>","");
            outputText = outputText.replaceAll("</head>","");
            outputText = outputText.replaceAll("<body>","");
            outputText = outputText.replaceAll("</body>","");

Das klappt natürlich. Das Symbol bleibt aber nach wie vor
 
G

Gast

Gast
Okay die API sagt das gehört zur Aufgabe von writeUTF

( http://java.sun.com/j2se/1.5.0/docs/api/java/io/RandomAccessFile.html#writeUTF(java.lang.String) )

Ich kann zwar nicht nachvollziehen was einem das bringen soll, aber das ist ja auch egal. Wie kann ich denn die ersten 2 Bytes aus einer Datei entfernen? Entsprechen die ersten 2 Bytes bei reinem Text auch den ersten 2 Zeichen? Dann könnte ich ja replaceFirst("..",""); machen oder?
 

HoaX

Top Contributor
http://java.sun.com/j2se/1.5.0/docs/api/java/io/DataOutputStream.html#writeUTF(java.lang.String)

da steht doch was das ist?

javadoc hat gesagt.:
First, two bytes are written to the output stream as if by the writeShort method giving the number of bytes to follow. This value is the number of bytes actually written out, not the length of the string. Following the length, each character of the string is output, in sequence, using the modified UTF-8 encoding for the character.

mach doch einfach
Code:
FileInputStream fin = new FileInputStream();
BufferedInputStream bin = new BufferedInputStream(fin);
DataInputStream  in  = new DataInputStream(bin);

// ...

byte[] data = outputText.getBytes("UTF-8");
bin.flush();
fout.write(data)

ich denke du solltest mal nachlesen was der DataOutput/InputStream genau macht und dann entschreiden ob du den wirklich willst, ich denke ehr nicht.
 
G

Guest

Gast
Ein DataOutputStream ermöglicht es, primitive Datentypen in definierter (und portabler) Weise auszugeben. So geschriebene Daten können mithilfe eines DataInputStream wieder eingelesen werden.
Quelle: "Handbuch der Java-Programmierung" 4. Auflage Seite 464

Doch ich denke schon das ich das will. Ich möchte eine HTML-Seite generieren lassen und sie wenn Daten hinzukommen auch modifizieren/erweitern. Dazu muss ich auch evtl schon erstellte Seiten einlesen. Bin ich da so falsch?

Vielen Dank für deinen Tipp, doch hat der zur Folge das der input nicht mitgenutzt wird. Das verstehe ich nicht da der String doch auch den Input beinhaltet ???:L

Code:
    /**
     * This method saves the solution in an html-file.
     * @param function The function (method) that was performed
     */
    public static void saveSolution(String function) {
        String inputText= "";
        try{
            
            DataInputStream  in  = new DataInputStream(
                                   new BufferedInputStream(
                                   new FileInputStream("solutions.html")));
            
            inputText = in.readUTF();
            
        }
        catch(IOException e) {
            System.err.println(e.toString());
        }
        try{         
            DataOutputStream out = new DataOutputStream(
                                   new BufferedOutputStream(
                                   new FileOutputStream("solutions.html")));
            
            String outputText = inputText;
            Date date = new Date();
            SimpleDateFormat dateFormat = new SimpleDateFormat( "dd.MM.yy HH:mm:ss" );
            outputText = outputText + "

<div align=\"right\"><font style=\"color: #0000FF;\">" + function + " - " + dateFormat.format(date) + "</font></div><hr />" + MainFrame.solutionAreaPane.getText();
            outputText = outputText.replaceAll("<html>","");
            outputText = outputText.replaceAll("</html>","");
            outputText = outputText.replaceAll("<head>","");
            outputText = outputText.replaceAll("</head>","");
            outputText = outputText.replaceAll("<body>","");
            outputText = outputText.replaceAll("</body>","");
            outputText = outputText.replaceAll("<title>TITLE - " + Main.langGet("solution") + "</title>","");
            outputText = outputText.replaceAll("\n\n","\n");
            outputText = "<html>\n<head><title>TITLE - " + Main.langGet("solution") + "</title></head>\n<body>" + outputText + "</body></html>";
            byte[] data = outputText.getBytes("UTF-8");
            out.write(data);
            out.close();
            
            if( !autoSave() ) JOptionPane.showMessageDialog(null, Main.langGet("saveSuccess") + System.getProperty("user.dir"));
        }
        catch(IOException e) {
            System.err.println(e.toString());
        }
    }
 
G

Guest

Gast
Sorry ein Copy n' Paste fehler.

Das Problem ist das er die Methode flush beim BufferedInputStream nicht kennt.
 

HoaX

Top Contributor
ja ich hatte mich vertan, das sollten die outputstreams sein, sonst machts doch keinen sinn ...

wie du korrekt zitierst sollte man die mit dataoutputstream geschriebenen daten auch wieder mit einem datainputstream lesen. der dataoutputstream hat sein eigenes format wie er die daten schreibt. damit dieser aber z.B. weiß wie lang ein string ist denn er einlesen muss schreibt er eben die länge davor - genau das willst du ja nicht, du willst nur die daten, also nimm gleich den fileinputstream.

den bufferedoutputstream solltest du vorher flushen, da dieser (wie der name schon sagt) die daten puffert, und daher u.U. manche daten die du zuvor in den bufferedoutputstream geschrieben hast noch noch in den fileoutputstream geschreiben sind, dann hast du eine inkonsistente datei ...
 
G

Guest

Gast
Okay, Danke.

Funktionierender, abgespeckter Code zum wiederverwenden:

Code:
    public static void saveSolution() {
        String inputText= "";
        BufferedInputStream bin;
        DataInputStream  in;
        FileInputStream fin;

        try{
            fin = new FileInputStream("datei.html");
            bin = new BufferedInputStream(fin);
            in  = new DataInputStream(bin);
            int read = 0;
            while( (read = in.read()) >= 0 ){
                inputText += (char) read;
            }
            in.close();
        } catch(IOException e) {
            System.err.println(e.toString());
        }
        try {
            
            DataOutputStream out = new DataOutputStream(
                                   new BufferedOutputStream(
                                   new FileOutputStream("datei.html")));
            
            String outputText = inputText + "
Neuer Text";
            byte[] data = outputText.getBytes("UTF-8");
            out.flush();            
            out.write(data);
            out.close();
        }
        catch(IOException e) {
            System.err.println(e.toString());
        }
    }
 

HoaX

Top Contributor
ok, da ja der Dataoutputstream auch write(byte[]) hat kann man natürlich das flush davor weglassen.

aber vor dem wiederverwenden würde ich noch einstellbar machen in welchem encoding die datei gelesen wird, im moment wird sie immer als utf-8 interpretiert, was man nicht immer will.

des weiteren ist dein
Code:
inputText += (char) read
sehr inperformant. lass lieber den DataInputStream weg und benutze BufferedInputStream.readLine() zum lesen und einen StringBuffer zum speichern anstatt des InputText-Strings. bzw könnte man auch byte[] lesen, in einen byteArrayOutputStream schreiben und mit dem resultat dann einen neuen string im gewünschten encoding erstellen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
C XML Datei speichern und laden Java Basics - Anfänger-Themen 18
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
B Text-Datei nur in Stream speichern und dann ausgeben Java Basics - Anfänger-Themen 3
I Datei in Programm speichern Java Basics - Anfänger-Themen 3
A .txt-Datei mit Java speichern Java Basics - Anfänger-Themen 2
X TextField-Inhalt mit Button in .txt-Datei speichern Java Basics - Anfänger-Themen 16
D Datei auslesen & Werte in Variable speichern Java Basics - Anfänger-Themen 12
D Erste Schritte Projekt in Ecplise in einer .zip Datei speichern Java Basics - Anfänger-Themen 8
I Projekt als .jar Datei speichern - Bilder werden nicht mehr angezeigt Java Basics - Anfänger-Themen 4
F Zahlen aus Datei einlesen und in Array speichern Java Basics - Anfänger-Themen 2
das_leon txt Datei speichern Java Basics - Anfänger-Themen 8
C Zeilen aus einer Datei in Array speichern Java Basics - Anfänger-Themen 4
O Ausgabe als .txt Datei speichern mit FileWriter Java Basics - Anfänger-Themen 2
JavaNewbie2.0 eclipse - Als ausführbare Datei speichern Java Basics - Anfänger-Themen 16
A .txt Datei in einem Array speichern Java Basics - Anfänger-Themen 1
T JTextarea in txt datei speichern Java Basics - Anfänger-Themen 3
H Aus wav-datei lesen und in neue wav-datei speichern Java Basics - Anfänger-Themen 10
F HTML Datei in .jar speichern und abändern Java Basics - Anfänger-Themen 2
K Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern Java Basics - Anfänger-Themen 5
G Datei modifizieren und dann speichern Java Basics - Anfänger-Themen 2
N Probleme bei Speicherung eines Integer-Array in Datei speichern Java Basics - Anfänger-Themen 3
B Datei mit String verbinden und speichern Java Basics - Anfänger-Themen 3
Z Greenfoot Variable in einer Datei und nicht in einem Objekt/World speichern Java Basics - Anfänger-Themen 1
Seikuassi Objekte in Datei reihenweise speichern/laden Java Basics - Anfänger-Themen 3
C Datei speichern während sie geöffnet ist Java Basics - Anfänger-Themen 4
B CSV-Datei auslesen, in Liste speichern und sortieren Java Basics - Anfänger-Themen 20
P Datei auf Pfad speichern Java Basics - Anfänger-Themen 7
S World-Datei möglichst klein speichern? Java Basics - Anfänger-Themen 5
L Datei aus Multipart parsen und speichern, seltsam codiert? Java Basics - Anfänger-Themen 16
S Arraylist in Datei speichern Java Basics - Anfänger-Themen 8
J .txt Datei "einlesen "und in String speichern ergibt immer NULL Java Basics - Anfänger-Themen 17
R csv-Datei auslesen und ausgelesene Daten in neue csv-Datei speichern Java Basics - Anfänger-Themen 2
M Zahlen als Bytes in eine Datei speichern, daraus wieder auslesen Java Basics - Anfänger-Themen 2
T Classpath Datei an dem gleichen Ort speichern Java Basics - Anfänger-Themen 9
T csv datei in text datei speichern Java Basics - Anfänger-Themen 3
F TextArea auslesen und in Datei speichern Java Basics - Anfänger-Themen 4
M Klassen Probleme beim Debuggen - Datentypkonvertierung - Speichern in Datei Java Basics - Anfänger-Themen 7
C Datei in bestimmtes Verzeichnis speichern Java Basics - Anfänger-Themen 2
S ArrayList in eine Txt-Datei speichern Java Basics - Anfänger-Themen 3
D String array in Datei speichern Java Basics - Anfänger-Themen 3
Gossi Input/Output Datei Lesen, inhalt abfragen, speichern Java Basics - Anfänger-Themen 5
K Mein Programm... Heute: Settings-Datei in .jar speichern und auslesen Java Basics - Anfänger-Themen 9
R Input/Output verschiedene Datentypen als Bytes in Datei speichern Java Basics - Anfänger-Themen 15
M Speichern in einer .txt Datei Java Basics - Anfänger-Themen 3
Y Datei auf Dektop mit timestamp Speichern Java Basics - Anfänger-Themen 5
T Datei so speichern das sie immer erreichbar ist Java Basics - Anfänger-Themen 2
B Werte der Variable aus Klasse JTextArea in einer Datei der Klasse RandomAcessFile speichern Java Basics - Anfänger-Themen 10
K Leerzeilen beim speichern in txt Datei Java Basics - Anfänger-Themen 6
D Bestehende Datei speichern Java Basics - Anfänger-Themen 3
c_sidi90 Array in einer txt Datei speichern Java Basics - Anfänger-Themen 11
J Einlesen/Speichern von Strings aus einer Datei Java Basics - Anfänger-Themen 15
D Objekte in Datei speichern. Java Basics - Anfänger-Themen 27
C Arraylist in Txt Datei speichern und auslesen Java Basics - Anfänger-Themen 8
M Daten in CSV Datei Speichern Java Basics - Anfänger-Themen 3
M String in csv Datei speichern Java Basics - Anfänger-Themen 7
B Datei speichern als PDF Java Basics - Anfänger-Themen 2
T Java Webstart soll eine Datei speichern Java Basics - Anfänger-Themen 2
M .txt datei "einlesen" und in String speichern! Java Basics - Anfänger-Themen 15
G POI: Aus einer Datei auslesen und in eine andere Datei speichern Java Basics - Anfänger-Themen 18
T Laufwerk auswählen und CD-Inhalt in txt Datei speichern Java Basics - Anfänger-Themen 16
W Objecte in (Text)Datei speichern Java Basics - Anfänger-Themen 3
L datei speichern untervorgegebenen pfad Java Basics - Anfänger-Themen 3
F Datei suchen --> Pfad als String speichern Java Basics - Anfänger-Themen 8
T ArrayList in Datei speichern und auslesen Java Basics - Anfänger-Themen 7
E Image in Datei speichern bzw anzeigen Java Basics - Anfänger-Themen 5
K Werte in einer Datei speichern ? Java Basics - Anfänger-Themen 9
G Collection<BufImg> in Datei speichern Java Basics - Anfänger-Themen 8
S Aus Datei lesen und im Array speichern Java Basics - Anfänger-Themen 2
J Datei lesen und in Array speichern Java Basics - Anfänger-Themen 5
G Datei an PHP Script senden und speichern Java Basics - Anfänger-Themen 2
P Teile aus Datei lesen und zus mit Strings in Datei speichern Java Basics - Anfänger-Themen 4
J Byte-Array als Hex-Datei speichern? Java Basics - Anfänger-Themen 9
G bytearray als Datei speichern? Java Basics - Anfänger-Themen 6
S Aus Datei in verketteter Liste speichern Java Basics - Anfänger-Themen 38
M Stringvariable in Datei speichern? Java Basics - Anfänger-Themen 2
M Javamail: Mail als separate Datei speichern? Java Basics - Anfänger-Themen 6
M Datei speichern mittels InputStream Java Basics - Anfänger-Themen 13
W "Verliere" Encoding beim speichern in Datei Java Basics - Anfänger-Themen 7
M Object speichern in Datei - Unterschied zw JRE und JDK Java Basics - Anfänger-Themen 13
G xml-dokument in datei speichern Java Basics - Anfänger-Themen 6
M Datei im Userverzeichnis speichern Java Basics - Anfänger-Themen 3
Q Integer Arrays in eine Datei Speichern Java Basics - Anfänger-Themen 9
K Datei öffnen, lesen, bearbeiten, in neuer datei speichern Java Basics - Anfänger-Themen 12
M den Pfad einer txt-Datei in einer variablen speichern Java Basics - Anfänger-Themen 6
M Aus .txt Datei Daten in Array speichern Java Basics - Anfänger-Themen 3
S JTable Struktur in Datei speichern Java Basics - Anfänger-Themen 7
B String-Array in Datei speichern und wieder auslesen Java Basics - Anfänger-Themen 3
N Datei in Unterordner speichern Java Basics - Anfänger-Themen 6
K Text von Eingabefeld in eine txt Datei speichern Java Basics - Anfänger-Themen 2
G Variable in Datei speichern Java Basics - Anfänger-Themen 4
U byte array in datei 'dumpen' / speichern Java Basics - Anfänger-Themen 2
F Bild einmal aus Datei laden und in Klasse speichern Java Basics - Anfänger-Themen 3
M Daten in Datei speichern Java Basics - Anfänger-Themen 8
roflomfg Text in eine lokale "*.txt-Datei" speichern Java Basics - Anfänger-Themen 9
S ini Datei auslesen und in programm speichern Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben