2008-12-02 14 views

Répondre

0

Y at-il une raison particulière d'utiliser XStream? Ce serait extrêmement facile à faire avec quelque chose comme JDOM si tout ce que vous faites est de tenter de sérialiser une chaîne ou deux.

C'est-à-dire quelque chose comme: Document doc = new Document();

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

Certains des détails ci-dessus sont probablement faux, mais c'est le flux de base. Peut-être devriez-vous poser une question plus précise afin que nous puissions comprendre exactement quel est le problème que vous rencontrez?

0

De 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); 
    } 
} 

Vous pouvez alors prendre la chaîne XML et écrire dans un fichier.

4

Si vous pouvez le sérialiser dans un fichier txt, ouvrez simplement un objet ObjectOutputStream et utilisez-le pour vous.

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(); 
    } 

Vous pouvez aussi ouvrir un PrintStream juste et siphonner cette façon, puis d'utiliser un BufferedReader et readLine(). Si vous voulez vraiment avoir de la fantaisie (puisque c'est une affectation matérielle après tout), vous pouvez utiliser une boucle for et imprimer chaque caractère individuellement. L'utilisation de XML est plus compliquée que nécessaire pour sérialiser une chaîne et l'utilisation d'une bibliothèque externe est juste trop lourde.

5

XStream dispose d'installations pour lire et écrire dans des fichiers, voir les exemples simples (Writer.java et Reader.java) in this article.

+2

+1, j'utilise: xstream.toXML (myThing, nouveau FileOutputStream (new File ("myfile.xml"))); – teejay

+0

putain c'est 5 ans! :-) – teejay

+1

Mis à jour le lien car il était cassé chez IBM. – smonff

1

Si vous devez créer un fichier texte contenant XML qui représente le contenu d'un objet (et le rendre bidirectionnel), il suffit d'utiliser 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); 

De là, vient d'écrire la chaîne à votre fichier . Beaucoup plus simple que toutes ces API XML. Maintenant, cependant, si vous avez besoin de vous conformer à une DTD ou une XSD, c'est une mauvaise façon de procéder car c'est beaucoup plus libre et conforme uniquement à la mise en page de l'objet.

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

Piko

3

Si vous commencez Java, puis prendre un certain temps pour regarder à travers le projet Apache Commons. Il y a beaucoup d'extensions de base à Java que vous utiliserez plusieurs fois.

Je suppose que vous voulez juste conserver une chaîne pour pouvoir la relire plus tard - dans ce cas, il ne doit pas nécessairement être XML.

Pour écrire une chaîne dans un fichier, voir org.apache.commons.io.FileUtils:

FileUtils.writeStringToFile(File file,String data)

Pour relis:

FileUtils.readFileToString(File file)

Références:

http://commons.apache.org/

http://commons.apache.org/io

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

Assurez-vous également de regarder commons-lang pour beaucoup de bonnes choses de base.

0

essayer quelque chose comme ceci:

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); 
    } 
Questions connexes