Чтение XML-файла с использованием FileInputStream (для Java)? - PullRequest
4 голосов
/ 12 декабря 2008

вот сделка.

Для моего проекта мне нужно сериализовать и десериализовать случайное дерево, используя 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 ]

1 голос
/ 12 декабря 2008

Из того, что я понимаю из http://x -stream.github.io / tutorial.html (я никогда раньше не работал с XStream), вам нужно сначала определить типы. Приведение к String определенно неверно, вам, вероятно, нужен настраиваемый тип (в зависимости от того, что находится внутри вашего случайного XML), а затем вам нужно сопоставить теги XML своим членам:

например.

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

означает, что он отображает тег "person" внутри вашего XML в ваш класс Person.

Для десериализации вы можете сделать:

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

Кроме того, вы дважды закрываете свой поток и, вероятно, хотите сделать это в блоке finally:)

edit: Прочитав ваш комментарий выше ...

Ваша задача состоит из двух шагов:

  1. десериализация
  2. Сериализация

Чтобы сериализовать ваш объект, вы должны сначала десериализовать его из входного файла.

Чтобы вывести ваш объект в виде строки, просто сделайте

String xml = xstream.toXML( myRandomTree );
1 голос
/ 12 декабря 2008

Метод xstream.fromXML() сделает чтение из входного потока за вас. Я думаю, проблема в том, что вы приводите возвращаемое значение из xstream.fromXML(fin) в строку, когда оно должно быть приведено к типу объекта, который вы изначально сериализовали (RandomTree Полагаю) Таким образом, код будет выглядеть так:

RandomTree tree = (RandomTree)xstream.fromXML(fin);

РЕДАКТИРОВАТЬ: после уточнения в комментариях цель автора - сначала прочитать строку, чтобы содержимое XML можно было распечатать перед десериализацией. С этой целью я рекомендую взглянуть на библиотеку IOUtils, упомянутую в этой теме

...