为什么我不能删除我创建的XML文件?

时间:2013-05-04 17:52:27

标签: java xml stax

我的first question是关于stax writer的速度。现在我遇到了一个问题:我无法使用delete();

删除我创建的XML文件

它仍以某种方式被使用。我试图手动删除它,但我不能 在文件创建时,我为StreamWriter调用方法close()

我试图在此方法完成后立即删除文件,在另一个文件中。 像: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();
}

2 个答案:

答案 0 :(得分:3)

关闭XMLStreamWriter不会关闭基础输出流。

请参阅:

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

答案 1 :(得分:0)

有趣的是,虽然可能是反直觉的,但如果你在Windows上使用Sun JVM,那么对System.gc()进行厚颜无耻的调用可能会有所帮助。是的,是的,我知道,我们“从不”必须明确地调用gc,并且“无法保证”运行等等。但请相信我,这是一个有时会出现的已知问题。