Чтение XML-файла с помощью FileInputStream (для Java)?

вот сделка.

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

Редактировать: Эй, ребята, спасибо за помощь, я понял это; Я не думаю, что мне нужно печатать это как строку, мне просто нужно было сделать систему оценки производительности для оценки времени и тому подобное, но еще раз спасибо!

12.12.2008 00:45:01
2 ОТВЕТА

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

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

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

1
23.05.2017 12:08:35
Ну, я хотел иметь возможность распечатать только что прочитанное (в виде строки), чтобы оно распечатывало как XML, так и десериализованную версию (в формате String). Это легко исправить? Я бы предположил, но когда я сделал то, что вы сказали, я получил GeneralTree @ af72d8 (где это было в моей памяти, я думаю)
ParseTheData 12.12.2008 01:54:35

Из того, что я понимаю из 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 :)

редактировать: прочитав ваш комментарий выше ...

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

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

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

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

String xml = xstream.toXML( myRandomTree );
1
12.09.2016 11:06:43