1

の最初の質問は、stax ライターの速度についてでした。ここで問題が発生しました。作成した XML ファイルを削除できません。delete();

今でも何とか使われています。手動で削除しようとしましたが、できませんでした。
ファイル作成の最後に、close()StreamWriter のメソッドを呼び出します。

このメソッドが完了した直後に、別のファイルでファイルを削除しようとしています。のようなもの:startstopwath;createxml(); stopstopwatch; file.delete()そこに何かを追加する必要がありますか?

これが私のコードです:

import java.io.*;
import java.util.*;
import javax.xml.stream.*;
import org.springframework.util.StopWatch;

public class StAXVytvor {

    public static String subor = "test.xml";

    public static void main(String[] args) {
        int num =600000;
        try {
            String encoding = "UTF-8";
            XMLOutputFactory f = XMLOutputFactory.newInstance();
            XMLStreamWriter w = f.createXMLStreamWriter(new BufferedOutputStream(newFileOutputStream(subor)), "UTF-8");
            w.writeStartDocument(encoding, "1.0");
            w.writeCharacters("\r\n");
            w.writeStartElement("Noviny");        
            for (int i = 1;  i <= num;  i++) {
                w.writeCharacters("\r\n  ");
                w.writeStartElement("Author");
                w.writeCharacters("\r\n  ");
                w.writeStartElement("Id"); 
                String ID = Integer.toString(i);
                w.writeCharacters(ID);
                w.writeEndElement();
                w.writeCharacters("\r\n  ");
                w.writeStartElement("Meno");
                w.writeCharacters("Autor"+i);
                w.writeEndElement();
                w.writeCharacters("\r\n  ");
                w.writeStartElement("Email");
                w.writeCharacters("Author"+i+"@email.com");
                w.writeEndElement();
                w.writeCharacters("\r\n  ");
                w.writeStartElement("phone");
                w.writeAttribute("type", "pevna");
                w.writeCharacters("+4219");
                w.writeEndElement();
                w.writeCharacters("\r\n  ");
                w.writeStartElement("plat");
                w.writeCharacters("5000");
                w.writeEndElement();
                w.writeCharacters("\r\n  ");        
                w.writeEndElement(); 
                w.writeCharacters("\r\n");
            }
            w.writeCharacters("\r\n");
            w.writeEndElement();        
            w.writeCharacters("\r\n");
            w.writeEndDocument();
            w.close(); 

            System.out.println("success");

        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ここで削除しようとしています:

domvytvor.main(args);
try {

    File file = new File ("STAX.xml");

    if(file.delete() && file1.delete() ){
        System.out.println(file.getName() + " is deleted!");
    }
    else{
        System.out.println("Delete operation is failed.");
    }
}
catch(Exception e)
{
    e.printStackTrace();
}
4

2 に答える 2

3

XMLStreamWriter を閉じても、基になる出力ストリームは閉じられません。

見る:

http://docs.oracle.com/javaee/5/api/javax/xml/stream/XMLStreamWriter.html#close()

于 2013-05-04T19:16:36.217 に答える
0

おかしなことに、直観に反するかもしれませんが、Windows で Sun JVM を使用している場合は、System.gc() への生意気な呼び出しでうまくいく可能性があります。はい、はい、わかっています。gc を明示的に呼び出す必要は「決して」ありません。また、実行が「保証されていません」などです。しかし、私を信じてください。

于 2013-05-07T14:00:45.670 に答える