2008-12-02 16 views

Respuesta

0

¿Hay alguna razón en particular para usar XStream? Esto sería extremadamente fácil de hacer con algo como JDOM si todo lo que estás haciendo es tratar de serializar una o dos cadenas.

Es decir, algo así como: Documento doc = new Documento();

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

Algunos de los detalles anteriores son probablemente incorrectos, pero ese es el flujo básico. Tal vez debería hacer una pregunta más específica para que podamos entender exactamente qué problema es lo que está teniendo.

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

A continuación, puede tomar la cadena XML y escribir en un archivo.

4

Si puede serializarlo en un archivo txt, simplemente abra ObjectOutputStream y haga que use la capacidad de serialización de String para usted.

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

También puedes, simplemente abrir una PrintStream y sifón que de esa manera, a continuación, utilizar un BufferedReader y readLine(). Si realmente quieres ser elegante (ya que esta es una tarea HW después de todo), puedes usar un ciclo for e imprimir cada carácter individualmente. Usar XML es más complicado de lo que necesita para serializar un String y usar una biblioteca externa es exagerado.

5

XStream tiene funciones para leer y escribir en archivos, vea los ejemplos simples (Writer.java y Reader.java) in this article.

+2

+1, yo uso: xstream.toXML (MYTHing, nuevo FileOutputStream (nuevo archivo ("myfile.xml"))); – teejay

+0

maldita sea 5 años! :-) – teejay

+1

Se ha actualizado el enlace porque se rompió en IBM. – smonff

1

Si necesita crear un archivo de texto que contiene XML que representa el contenido de un objeto (y que sea bidireccional), sólo tiene que utilizar la biblioteca JSON:

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

A partir de ahí acaba de escribir la cadena para su archivo . Mucho más simple que todas las API XML. Ahora, sin embargo, si necesita ajustarse a una DTD o XSD, esta es una mala forma de hacerlo, ya que es mucho más de formato libre y se ajusta solo al diseño del objeto.

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

Piko

3

Si usted está comenzando Java, a continuación, tomar algún tiempo para mirar a través del proyecto Apache Commons. Hay muchas extensiones básicas para Java que utilizará muchas veces.

Supongo que solo quiere conservar una cadena para que pueda leerla más tarde, en cuyo caso no necesariamente tiene que ser XML.

Para escribir una cadena en un archivo, consulte org.apache.commons.io.FileUtils:

FileUtils.writeStringToFile(File file,String data)

Para leer de nuevo:

FileUtils.readFileToString(File file)

Referencias:

http://commons.apache.org/

http://commons.apache.org/io

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

Asegúrate también de mirar commons-lang para obtener muchas cosas básicas buenas.

0

intentar algo como esto:

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); 
    } 
Cuestiones relacionadas