将XML文件(使用XStream)写入Java中的文件系统

时间:2008-12-02 20:41:06

标签: java xml serialization

我需要能够序列化一个字符串,然后将其保存在.txt或.xml文件中。我从未使用过实现来读/写文件,只记得我是一个相对初学者。另外,我需要知道如何将终端中要打印的字符串反序列化为普通字符串。

7 个答案:

答案 0 :(得分:5)

XStream具有读取和写入文件的功能,请参阅简单示例(Writer.java和Reader.java)in this article

答案 1 :(得分:4)

如果您可以将其序列化为txt文件,只需打开一个ObjectOutputStream并让它使用String自己的序列化功能。

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

你也可以打开一个PrintStream并以这种方式虹吸它,然后使用BufferedReader和readLine()。如果你真的想要花哨(因为这毕竟是一个硬件分配),你可以使用for循环并单独打印每个字符。使用XML比序列化String所需的更复杂,使用外部库只是一种过度的做法。

答案 2 :(得分:3)

如果您正在开始使用Java,那么请花点时间浏览一下Apache Commons项目。有很多基本的java扩展,你可以多次使用它。

我假设您只想保留一个字符串,以便稍后再读取它 - 在这种情况下,它不一定需要是XML。

要将字符串写入文件,请参阅org.apache.commons.io.FileUtils:

FileUtils.writeStringToFile(File file,String data)

要读回来:

FileUtils.readFileToString(File file)

参考文献:

http://commons.apache.org/

http://commons.apache.org/io

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

请务必查看commons-lang以获取大量基本内容。

答案 3 :(得分:1)

如果您需要创建一个包含表示对象内容的XML的文本文件(并使其成为双向),只需使用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 );

从那里刚刚将String写入您的文件。比所有那些XML API简单得多。但是,现在,如果你需要符合DTD或XSD,这是一个糟糕的方式,因为它更加自由格式并且只符合对象布局。

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

Piko的

答案 4 :(得分:0)

使用XStream有什么特别的理由吗?如果您正在尝试序列化一两个字符串,那么使用JDOM之类的内容非常容易。

是的,比如: 文档doc = new Document();

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

上面的一些细节可能是错误的,但这就是基本流程。也许你应该问一个更具体的问题,这样我们才能准确理解你所遇到的问题?

答案 5 :(得分:0)

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

然后,您可以获取xml字符串并将其写入文件。

答案 6 :(得分:0)

尝试这样的事情:

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