2008-12-02 14 views
5

Ich muss in der Lage sein, eine Zeichenfolge zu serialisieren und sie dann in einer .txt- oder .xml-Datei speichern zu lassen. Ich habe die Implementierung nie benutzt, um Dateien zu lesen/schreiben, nur daran erinnern, dass ich ein relativer Anfänger bin. Außerdem muss ich wissen, wie die im Terminal auszudruckende Zeichenfolge als normale Zeichenfolge deserialisiert wird.XML-Datei (mit XStream) in das Dateisystem in Java schreiben

Antwort

0

Gibt es einen besonderen Grund für die Verwendung von XStream? Dies wäre sehr einfach mit etwas wie JDOM zu tun, wenn Sie nur versuchen, eine oder zwei Strings zu serialisieren.

Ie, etwas wie: Dokument doc = new Document();

Element rootEl = new Element("root"); 
rootEl.setText("my string"); 
doc.appendChild(rootEl); 
XMLOutputter outputter = new XMLOutputter(); 
outputter.output(doc); 

Einige der oben genannten Details sind wahrscheinlich falsch, aber das ist der grundlegende Fluss. Vielleicht sollten Sie eine konkretere Frage stellen, damit wir genau verstehen, welches Problem Sie haben?

0

Von http://www.xml.com/pub/a/2004/08/18/xstream.html:

import com.thoughtworks.xstream.XStream; 

class Date { 
    int year; 
    int month; 
    int day; 
} 

public class Serialize { 
    public static void main(String[] args) { 

     XStream xstream = new XStream(); 

     Date date = new Date(); 
     date.year = 2004; 
     date.month = 8; 
     date.day = 15; 

     xstream.alias("date", Date.class); 

     String decl = "\n"; 

     String xml = xstream.toXML(date); 

     System.out.print(decl + xml); 
    } 
} 

public class Deserialize { 

    public static void main(String[] args) { 

     XStream xstream = new XStream(); 

     Date date = new Date(); 

     xstream.alias("date", Date.class); 

     String xml = xstream.toXML(date); 

     System.out.print(xml); 

     Date newdate = (Date)xstream.fromXML(xml); 
     newdate.month = 12; 
     newdate.day = 2; 

     String newxml = xstream.toXML(newdate); 

     System.out.print("\n\n" + newxml); 
    } 
} 

können Sie dann die XML-Zeichenfolge und schreibt sie in eine Datei.

4

Wenn Sie es in eine TXT-Datei serialisieren können, öffnen Sie einfach einen ObjectOutputStream und nutzen Sie die eigene Serialisierungsfunktion von String für Sie.

String str = "serialize me"; 
    String file = "file.txt"; 
    try{ 
     ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file)); 
     out.writeObject(str); 
     out.close(); 

     ObjectInputStream in = new ObjectInputStream(new FileInputStream(file)); 
     String newString = (String) in.readObject(); 
     assert str.equals(newString); 
     System.out.println("Strings are equal"); 
    }catch(IOException ex){ 
     ex.printStackTrace(); 
    }catch(ClassNotFoundException ex){ 
     ex.printStackTrace(); 
    } 

Sie könnten auch nur öffnen Sie ein Print und Siphon es auf diese Weise, dann ein BufferedReader und readline() verwenden. Wenn Sie wirklich Lust haben wollen (da es sich um eine HW-Aufgabe handelt), könnten Sie eine for-Schleife verwenden und jedes Zeichen einzeln ausdrucken. Die Verwendung von XML ist komplizierter, als Sie eine Zeichenfolge serialisieren müssen, und die Verwendung einer externen Bibliothek ist einfach übertrieben.

5

XStream verfügt über Funktionen zum Lesen von und Schreiben in Dateien, siehe die einfachen Beispiele (Writer.java und Reader.java) in this article.

+2

+1, ich benutze: xstream.toXML (Mything, neue Fileoutputstream (new File ("myfile.xml"))); – teejay

+0

Verdammt, es ist 5 Jahre alt! :-) – teejay

+1

Die Verknüpfung wurde aktualisiert, weil sie bei IBM unterbrochen wurde. – smonff

1

Wenn Sie eine Textdatei erstellen XML enthält, die den Inhalt eines Objekt darstellt (und es bidirektional machen), nur verwenden JSON-lib:

class MyBean{ 
    private String name = "json"; 
    private int pojoId = 1; 
    private char[] options = new char[]{'a','f'}; 
    private String func1 = "function(i){ return this.options[i]; }"; 
    private JSONFunction func2 = new JSONFunction(new String[]{"i"},"return this.options[i];"); 

    // getters & setters 
    ... 
} 

JSONObject jsonObject = JSONObject.fromObject(new MyBean()); 
String xmlText = XMLSerializer.write(jsonObject); 

Von dort schrieb nur den String in Dateien . Viel einfacher als all diese XML-APIs. Wenn Sie jedoch einer DTD oder XSD entsprechen müssen, ist dies ein schlechter Weg, da es viel freier formatiert ist und nur dem Objektlayout entspricht.

http://json-lib.sourceforge.net/usage.html

Piko

3

Wenn Sie Java beginnen, dann einige Zeit dauern, bis die Apache Commons Projekt zu suchen. Es gibt viele grundlegende Erweiterungen für Java, die Sie oft nutzen werden.

Ich nehme an, Sie möchten nur eine Zeichenfolge beibehalten, so dass Sie es später wieder lesen können - in diesem Fall muss es nicht unbedingt XML sein.

Um eine Zeichenfolge in eine Datei zu schreiben, siehe org.apache.commons.io.FileUtils:

FileUtils.writeStringToFile(File file,String data)

es wieder zu lesen:

FileUtils.readFileToString(File file)

Referenzen:

http://commons.apache.org/

http://commons.apache.org/io

http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html

Stellen Sie sicher, dass Sie auch auf commons-lang für viele gute grundlegende Sachen schauen.

0

versuchen, etwas wie folgt aus:

FileOutputStream fos = null; 
    try { 
     new File(FILE_LOCATION_DIRECTORY).mkdirs(); 
     File fileLocation = new File(FILE_LOCATION_DIRECTORY + "/" + fileName); 
     fos = new FileOutputStream(fileLocation); 
     stream.toXML(userAlertSubscription, fos);     
    } catch (IOException e) { 
     Log.error(this, "Error %s in file %s", e.getMessage(), fileName); 
    } finally { 
     IOUtils.closeQuietly(fos); 
    }