1

XStreamにオブジェクトを書き込むために使用しますxml file
次に、ファイルを再度デシリアライズして、オブジェクトを使用します。
私の問題は、プログラムを閉じた後、xml「ファイル」がなくなっていることです。では、この xml ファイルを特定のディレクトリに保存するにはどうすればよいでしょうか? 私はすでに試しFileOutputStreamましたが、うまくいきません...私もグーグルで調べましたが、私にとって正しい解決策が見つかりませんでした...

メソッドsavePerson

public void savePerson(String uNummer, Person person) {
    System.out.println("save person");
    try{            
        xml = xstream.toXML(person);

    }catch (Exception e){
        System.err.println("Error in XML Write: " + e.getMessage());
    }
}

そしてメソッドreadPerson

public Person readPerson(String uNummer) {
    System.out.println("read person");
     Person person = new Person();
    try{
        person = (Person) xstream.fromXML(file_path + uNummer + ".xml");       
    }catch(Exception e){
        System.err.println("Error in XML Read: " + e.getMessage());
    }
    return person;
}

ディレクトリ:\\releasearea\ToolReleaseArea\PersistenceSave

EDIT
正しいコード:(ppeterkaによる)

public void savePerson(String uNummer, Person person) {
    System.out.println("save person XML");
    FileOutputStream fos = null;
    try{            
        xml = xstream.toXML(person);
        fos = new FileOutputStream(file_path + uNummer + ".xml");
        fos.write("<?xml version=\"1.0\"?>".getBytes("UTF-8"));
        byte[] bytes = xml.getBytes("UTF-8");
        fos.write(bytes);

    }catch (Exception e){
        System.err.println("Error in XML Write: " + e.getMessage());
    }
    finally{
        if(fos != null){
            try{
                fos.close();
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
4

3 に答える 3

5

ファイルを作成したのではなく、シリアル化されたコンテンツを取得しただけです...

FileOutputStream fos = null;
try {
    fos = new FileOutputStream("myfilename");
    fos.write("<?xml version=\"1.0\"?>".getBytes("UTF-8")); //write XML header, as XStream doesn't do that for us
    byte[] bytes = xml.getBytes("UTF-8");
    fos.write(bytes);

} catch(Exception e) {
    e.printStackTrace(); // this obviously needs to be refined.
} finally {
    if(fos!=null) {
        try{ 
            fos.close();
        } catch (IOException e) {
            e.printStackTrace(); // this obviously needs to be refined.
        }
    }
}

また、読み取り関数にもエラーがあります。 はxstream.fromXML(String)を受け入れますがString、それをファイル名として解釈するのではなく、XML コンテンツ自体として解釈しますfromXML(File)

public Person readPerson(String uNummer) {
    System.out.println("read person");
    Person person = new Person(); //if there is an error during deserialization, this is going to be returned, is this what you want?
    try{
        File xmlFile = new File(file_path + uNummer + ".xml");
        person = (Person) xstream.fromXML(xmlFile);       
    }catch(Exception e){
        System.err.println("Error in XML Read: " + e.getMessage());
    }
    return person;
}
于 2012-10-25T07:48:42.970 に答える
5

オーバーロードされたメソッド toXML(Object o, Writer w) を使用して、ファイルに直接シリアル化します。使用している toXML メソッドはファイルに保存されません。

xstream.toXML(person, new FileWriter(file));
于 2012-10-25T07:53:59.213 に答える
0

私はこれがうまくいっているようにやっています:

//Your Stream things...

    String xml = xstream.toXML(type);

        System.out.println(xml);

        BufferedReader reader = new BufferedReader(new StringReader(xml));
        BufferedWriter writer = new BufferedWriter(new FileWriter("test.xml",
                true));

        while ((xml = reader.readLine()) != null) {

            writer.write(xml + System.getProperty("line.separator"));

        }

        writer.close()

;

出力は次のとおりです。

<type>
  <OBJECT__TYPE>sdfsdf</OBJECT__TYPE>
  <prop>
    <DESCRIPTION>hfh</DESCRIPTION>
    <PARENT>NULL</PARENT>
    <VIRTUAL>0</VIRTUAL>
    <VISIBLE>1</VISIBLE>
    <PICTURE>NULL</PICTURE>
    <HELP>345345</HELP>
    <MIN__NO>NULL</MIN__NO>
    <MAX__NO>1</MAX__NO>
    <NAME__FORMAT>NULL</NAME__FORMAT>
  </prop>
</type>
<type>
  <OBJECT__TYPE>test</OBJECT__TYPE>
  <prop>
    <DESCRIPTION>test</DESCRIPTION>
    <PARENT>NULL</PARENT>
    <VIRTUAL>0</VIRTUAL>
    <VISIBLE>0</VISIBLE>
    <PICTURE>NULL</PICTURE>
    <HELP>noe</HELP>
    <MIN__NO>NULL</MIN__NO>
    <MAX__NO>NULL</MAX__NO>
    <NAME__FORMAT>5475</NAME__FORMAT>
  </prop>
</type>
于 2014-01-23T13:19:18.087 に答える