0

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

这是序列化为 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());
    }

和类::

@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;
}




}
4

3 回答 3

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)

于 2012-11-13T08:25:42.627 回答
0

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

您可以添加一个新类作为PrescripManager类实例的集合。类似的东西PrescripManagerList

public class PrescripManagerList{

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

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

于 2012-11-13T08:47:57.020 回答
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");
于 2012-11-13T08:17:57.990 回答