0

ユーザーが XML ファイルに書き込まれるデータを入力するこのプロジェクトに取り組んでいます。この部分は正常に動作しています。ユーザーがプログラムを実行すると、そのファイルに追加できるはずです。代わりに、エントリが 1 つだけの新しいファイルが作成されます。ファイル出力ストリームも解決策ではありません。

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ファイルを作成することを意味するためです。

少なくとも 3 つの選択肢があります。

  • 古いファイルを読み取り、実際のデータに追加してから、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

XML ファイルの処理に JAXB を使用しているため、これをサポートするように XML ファイル形式と Java クラスを変更することをお勧めします。

PrescripManager新しいクラスをクラス インスタンスのコレクションとして追加できます。のようなものPrescripManagerList

public class PrescripManagerList{

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

コードを実行するときは、JAXB unmarshaller を使用して既存の XML ファイルを読み取ってオブジェクトを取得しPrescripManagerList、新しいPrescripManagerオブジェクトを に追加してから、 JAXB marshaller を使用しArrayListて更新されたオブジェクトをファイルに書き込みます。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 に答える