多个运行时之间的文件输出?

时间:2012-11-13 07:35:44

标签: java xml jaxb

我正在开发这个项目,用户输入一些写入XML文件的数据。这部分工作正常。 现在,当用户运行程序时,他应该能够附加到该文件。相反,它只用一个条目创建一个新文件! fileoutput流也不是解决方案。

以下是序列化为XML的代码

String medicine=medicfield.getText();
    String doctor=dnamefield.getText();
    int duration=Integer.parseInt(dodfield.getText());
    int amount=Integer.parseInt(cyclefield.getText());



    int inter=Integer.parseInt(intval.getText());
    PrescripManager pm=new PrescripManager();
    pm.setDcycle(amount);
    pm.setDosage(duration);
    pm.setInterval(inter);
    pm.setmedName(medicine);
    pm.setdocName(doctor);


    try{
        FileOutputStream file = new FileOutputStream("file.xml");

    JAXBContext jaxbContext = JAXBContext.newInstance(PrescripManager.class);
    Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

    // output pretty printed

    jaxbMarshaller.marshal(pm, file);

    }
    catch(Exception ex)
    {
    erlbl.setText(ex.getMessage());
    }

和Class ::

@XmlRootElement
public class PrescripManager {
private String medname,docname;
private int interval,dcycle,dosage;
private Date dt;
public String getmedName() {
    return medname;
}

public void setmedName(String medname) {
    this.medname = medname;
}
public String getdocName() {
    return docname;
}

public void setdocName(String docname) {
    this.docname = docname;
}
public int getInterval() {
    return interval;
}

public void setInterval(int interval) {
    this.interval = interval;
}
public int getDcycle() {
    return dcycle;
}

public void setDcycle(int dcycle) {
    this.dcycle = dcycle;
}
 public int getDosage() {
    return dosage;
}

public void setDosage(int dosage) {
    this.dosage = dosage;
}




}

3 个答案:

答案 0 :(得分:2)

首先,您正在编写XML文件。您不能只附加到XML文件,因为这意味着您在关闭顶级标记之后编写,导致XML文件无效。

您至少有三个选择:

  • 读入旧文件,添加到实际数据中,然后再写回整个XML文件。
  • 写入多个文件,每个文件都是一个有效的XML文件,文件名中包含序列号或时间戳。
  • 不使用XML,使用可以附加到
  • 的格式

作为旁注,如果要附加到文件,可以在追加模式下打开它。这将使每个写入附加(至少在Unix上,当文件以追加模式打开时,我认为它在Windows中的工作方式相同)。

如何在Java中以附加模式打开文件:http://docs.oracle.com/javase/6/docs/api/java/io/FileOutputStream.html#FileOutputStream(java.io.File, boolean)

答案 1 :(得分:0)

您可以使用“FileWriter”类,它允许您在文件末尾写入。见

http://docs.oracle.com/javase/6/docs/api/java/io/FileWriter.html

此链接可以帮助您:

http://www.coderanch.com/t/276346//java/do-open-file-append-mode

我认为如果你使用

它应该有用
FilterWriter file = new FileWriter( "file.xml" , true );

而不是

FileOutputStream file = new FileOutputStream("file.xml");

答案 2 :(得分:0)

您正在使用JAXB处理XML文件,因此最好更改XML文件格式和Java类以支持此文件。

您可以将新类添加为PrescripManager类实例的集合。类似于PrescripManagerList

public class PrescripManagerList{

  @XmlElementWrapper(name = "prescripManagers")
  @XmlElement(name = "prescripManager")
  private ArrayList<PrescripManager> prescripManagers;
} 

运行代码时,尝试使用JAXB unmarshaller读取现有XML文件以获取PrescripManagerList对象,然后将新的PrescripManager对象添加到ArrayList,然后编写使用JAXB marshaller将PrescripManagerList对象更新为文件。