我正在开发这个项目,用户输入一些写入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;
}
}
答案 0 :(得分:2)
首先,您正在编写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
对象更新为文件。