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

标签 java xml jaxb

我正在开发这个项目,用户输入一些数据并写入 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());
    }

以及类(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;
}




}

最佳答案

首先,您正在编写一个 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)

关于java - 多个运行时之间的文件输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13357015/

相关文章:

java - 使 libgdx 文本字段忽略某些字符?

xml - 内联 svg 不显示图像

java - 优化代码以提高速度

java - 无法将 XSD 转换为 Java 类

java - 为什么 HashMap<String, Object> 不接受 HashMap<String, List> 实例?

java - 插入行 SPRING + Hibernate 时的 MySql 编码问题

java - java android取消静音按钮的问题

java - Spring xml + JUnit - xml 上下文文件在 src/test/resources 中不起作用但在 src/main/resources 中起作用

Java JaxB Unmarshaller 给出 org.xml.sax.SAXParseException 文件过早结束

java - 将 JAXB 编码为 XML 文件时