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