2015-12-28 3 views
2

Я создал XML-файл в качестве базы данных для объектов, которые я создал (называемый «тройной»). Когда я пытаюсь добавить еще одну строку нового объекта (того же типа), он удаляет предыдущую строку. Как добавить без удаления? (В предыдущей строке)Как добавить объект в xml в Java?

Вот код:

public class RDB { 
    File file; 
    String filepath; 
    JAXBContext jaxbContext; 
    Marshaller jaxbMarshaller; 


    RDB(){ 
     filepath = "RDB.xml"; 
     file = new File(filepath);  
     StreamResult result = new StreamResult(file); 
     try { 
      jaxbContext = JAXBContext.newInstance(triple.class); 
      jaxbMarshaller = jaxbContext.createMarshaller(); 
     } catch (JAXBException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 


    void addToXml(triple t){ 
     try { 
      // output pretty printed 
      jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

      jaxbMarshaller.marshal(t, file); 
      jaxbMarshaller.marshal(t, System.out); 

       } catch (JAXBException e) { 
      e.printStackTrace(); 
      } 
    } 


    public static void main(String argv[]) { 

     RDB r = new RDB(); 
     r.addToXml(new triple(1,2,3)); 
     r.addToXml(new triple(4,5,6)); 

    } 

И внешний вид тройной класс, как это:

public class triple implements Serializable { 


    private static final long serialVersionUID = 1L; 
    private double x, y; 
    private int z; 

    triple(double x , double y, int z){ 
     this.x = x; 
     this.y = y; 
     this.z = z; 
    } 

Спасибо!

+0

Пожалуйста, используйте соглашение об именах Java, т. Е. Класс «тройной» должен быть назван классом «тройной». –

ответ

0

Вы сортируете один объект за раз. Вы перезаписываете файл при каждом вызове addToXml().

Пожалуйста, попробуйте реализовать класс с массивом «тройной», а затем маршал этого класса.

+1

спасибо! хорошая идея –

+0

Или вы можете открыть файл в режиме добавления :) – SomeDude

+0

@svasa Я не знаю, можно ли открыть двоичный файл в режиме добавления (в данном случае POI Apache). Думаю, это невозможно. У вас есть информация об этом? Спасибо –

0

Использование FileOutputStream для записи XML в режиме добавления, как:

OutputStream out = FileOutputStream(file, true); 

затем использовать jaxbMarshaller.marshal(t, out);

Убедитесь в том, правильно близкие потоки после того как вы сделали.

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