Search code examples
javaxmlstax

Why can't I delete the XML file I created?


My first question was about the speed of stax writer. Now I have a problem: I can't delete the XML file I created, with delete();

It is still being used somehow. I have tried to delete it manually but I could not.
At the and of file creation I call method close() for StreamWriter.

I am trying to delete file right after this method is done, in another file. Something like: startstopwath;createxml(); stopstopwatch; file.delete() Do I have to add something more there?

Here is my code:

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();
        }
    }
}

I am trying to delete it here:

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();
}

Solution

  • Closing the XMLStreamWriter does not close the underlying output stream.

    see:

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