使用FileInputStream(用于Java)读取XML文件?

时间:2008-12-12 00:45:01

标签: java xml serialization fileinputstream

这是交易。

对于我的项目,我必须使用Java和XStream对随机树进行序列化和反序列化。我的老师制作了Tree / RandomTree算法,所以我不必担心。我不知道该怎么做是这样的:我使用FileInputStream来读/写我序列化和反序列化的xml文件,但是当我反序列化时,我不知道用于读取文件的方法。在我读完文件之后,我应该能够从XML转换它,然后将其作为字符串打印出来。这是我到目前为止所拥有的。 (我正确导入了所有内容,只是没有将其添加到我的代码段)。

FileInputStream fin;        

try
{
    // Open an input stream
    fin = new FileInputStream ("/Users/Pat/programs/randomtree.xml");

    //I don't know what to put below this, to read FileInpuStream object fin

    String dexml = (String)xstream.fromXML(fin);

    System.out.println(dexml);

    // Close our input stream
    fin.close();    


    System.out.println(dexml);

    // Close our input stream
    fin.close();        
}
// Catches any error conditions
catch (IOException e)
{
    System.err.println ("Unable to read from file");
    System.exit(-1);
}

编辑:嘿伙计们,感谢您的帮助,我想出来了;我不认为我必须将其打印为字符串,我只需要制作一个基准测试框架来计时等等,但再次感谢!

2 个答案:

答案 0 :(得分:1)

xstream.fromXML()方法将为您输入输入流。我认为问题是你将xstream.fromXML(fin)的返回值转换为一个字符串,它应该被转换为你最初序列化的对象类型(我假设RandomTree)。所以代码看起来像这样:

RandomTree tree = (RandomTree)xstream.fromXML(fin);
编辑:在评论中澄清之后,作者的目标是首先读入一个字符串,以便在反序列化之前打印XML内容。考虑到这一目标,我建议您查看this thread

中提到的IOUtils库

答案 1 :(得分:1)

根据我对http://x-stream.github.io/tutorial.html的理解(我之前从未使用过XStream),您需要先定义类型。转换为String绝对是错误的,你可能想要一个自定义类型(取决于随机XML中的内容),然后你需要将XML标签映射到你的成员:

e.g。

xstream.alias("person", Person.class);
xstream.alias("phonenumber", PhoneNumber.class);

意味着它将XML中的“person”标记映射到Person类。

要进行去科学化,你可以这样做:

RandomTree myRandomTree = (RandomTree)xstream.fromXML( xml );

此外,您关闭了两次流,并且您可能希望在finally块中执行此操作:)

编辑:阅读上面的评论......

您的任务涉及两个步骤:

  1. 反序列化
  2. 序列化
  3. 为了序列化您的对象,您必须首先从输入文件中反序列化它。

    要将对象输出为String,只需执行

    String xml = xstream.toXML( myRandomTree );