我正在读取XML文件,处理元素并使用从输入文件中提取的元素编写另一个XML文件。 为此我使用StAX游标:我使用XMLStreamReader读取元素,并使用XMLStreamWriter在另一个文件中写入元素。
读者:
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
XMLStreamReader streamReader = inputFactory.createXMLStreamReader(new FileReader(inputFile));
作者:
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
XMLStreamWriter streamWriter = outputFactory.createXMLStreamWriter(new FileOutputStream (outputFile),"UTF-8");
完成处理并写入输出文件后,我想删除我读取的文件(输入文件)。我正在使用:
public void deleteInputFile(String inputFile) {
File fileToDelete = new File(inputFile);
if(fileToDelete.delete()){
System.out.println(fileToDelete.getName() + " is deleted!");
}else{
System.out.println("Delete operation is failed.");
}
}
所有程序都正常,但删除操作失败。我得到了答复:
删除操作失败。
我认为读者在读取后会关闭输入文件。
问题是,在写完我需要的文件之后,我该怎么做才能删除输入文件?
答案 0 :(得分:2)
确保关闭输入流,然后删除文件。
您可以删除文件,目录或链接。使用符号链接,链接将被删除,而不是链接的目标。对于目录,目录必须为空,否则删除失败。
Files类提供了两种删除方法。
如果删除失败,delete(Path)
方法会删除文件或引发异常。例如,如果文件不存在,则抛出NoSuchFileException。您可以捕获异常以确定删除失败的原因,如下所示:
try {
Files.delete(path);
} catch (NoSuchFileException x) {
System.err.format("%s: no such" + " file or directory%n", path);
} catch (DirectoryNotEmptyException x) {
System.err.format("%s not empty%n", path);
} catch (IOException x) {
// File permission problems are caught here.
System.err.println(x);
}
deleteIfExists(Path)
方法也会删除该文件,但如果该文件不存在,则不会抛出任何异常。当你有多个线程删除文件并且你不想仅仅因为一个线程首先抛出异常时,静默失败很有用。
取自https://docs.oracle.com/javase/tutorial/essential/io/delete.html
这是另一个例子http://www.mkyong.com/java/how-to-delete-file-in-java/
答案 1 :(得分:0)
所有流必须单独声明,以便您可以单独关闭它们:
// Declarring streams:
FileReader fr = new FileReader(inputFile);
XMLStreamReader streamReader = inputFactory.createXMLStreamReader(fr);
...
// Closing streams.
fr.close();
streamReader.close();
// Deleting inputFile
deleteMethod();