2012-02-29 1 views
1

Я хотел бы использовать XML-файл в качестве словаря для проекта NLP, над которым я работаю. В настоящее время у меня есть класс «Слова», который является вектором объектов «Word».Прочитать XML-файл в вектор объектов с помощью XStream

public class Words { 

private Vector<Word> vect; 

public Words(){ 
    vect = new Vector<Word>(); 
} 

public void add(Word w){ 
    vect.add(w); 
} 

Класс "Слово" выглядит примерно так:

public class Word { 
private String name; 
private String partOfSpeech; 
private String category; 
private String definition; 
} 

мне удалось написать "Слова" вектор в XML с использованием XStream, используя этот код:

public class Writer { 

public static void main(String[] args) { 

    XStream xstream = new XStream(); 
    xstream.alias("words", Words.class); 
    xstream.alias("word", Word.class); 
    xstream.addImplicitCollection(Words.class, "vect"); 

    Words vect = new Words(); 
    vect.add(new Word("dog", "noun", "animal", "a domesticated canid, Canis familiaris, bred in many varieties")); 
    vect.add(new Word("cat", "noun", "animal", "a small domesticated carnivore, Felis domestica or F. catus, bred in a number of varieties")); 


    try { 
     FileOutputStream fs = new FileOutputStream("c:/dictionary.xml"); 
     xstream.toXML(vect, fs); 
    } catch (FileNotFoundException e1) { 
     e1.printStackTrace(); 
    } 
} 
} 

Все это работает нормально и дает мне следующий файл XML:

<words> 
    <word> 
     <name>dog</name> 
     <partOfSpeech>noun</partOfSpeech> 
     <category>animal</category> 
     <definition>a domesticated canid, Canis familiaris, bred in many varieties</definition> 
    </word> 
    <word> 
     <name>cat</name> 
     <partOfSpeech>noun</partOfSpeech> 
     <category>animail</category> 
     <definition>a small domesticated carnivore, Felis domestica or F. catus, bred in a number of varieties</definition> 
    </word> 
</words> 

Мой вопрос: как использовать XStream для чтения этого XML-файла обратно в вектор объектов?

ответ

1

Я был в состоянии прочитать файл, используя следующий код:

public class Reader { 
public static void main(String[] args) { 

    XStream xstream = new XStream(new DomDriver()); 
    try { 
    FileInputStream fis = new FileInputStream("c:/dictionary.xml"); 
    ObjectInputStream in = xstream.createObjectInputStream(fis); 
    xstream.alias("word", Word.class); 

    Word a = (Word)in.readObject(); 
    Word b = (Word)in.readObject(); 

    in.close(); 

    System.out.println(a.toString()); 
    System.out.println(b.toString()); 

    } catch (FileNotFoundException ex) { 
     ex.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }  
} 

}

Теперь, вместо того чтобы сказать:

Word a = (Word)in.readObject(); 
Word b = (Word)in.readObject(); 

Я хотел бы читать объекты в вектор, используя цикл. Моя единственная проблема теперь в том, как я могу узнать, сколько объектов в ObjectInputStream. У него, как представляется, нет метода, который сообщает мне количество объектов или размер ...

Смежные вопросы