无法在try catch中删除文件

时间:2013-08-05 19:44:25

标签: java file try-catch delete-file

我会先发布我的代码:

private void validateXml(String xml) throws BadSyntaxException{
    File xmlFile = new File(xml);
    try {
        JaxbCommon.unmarshalFile(xml, Gen.class);
    } catch (JAXBException jxe) {
        logger.error("JAXBException loading " + xml);
        String xmlPath = xmlFile.getAbsolutePath();
        System.out.println(xmlFile.delete()); // prints false, meaning cannot be deleted
        xmlFile.delete();
        throw new BadSyntaxException(xmlPath + "/package.xml");
    } catch (FileNotFoundException fne) {
        logger.error("FileNotFoundException loading " + xml + " not found");
        fne.printStackTrace();
    }
}

您可以在我的评论中看到我打印的文件无法删除。无法从try / catch删除文件?因此,如果存在包含错误xml语法的文件,我想删除catch中的文件。

编辑:当我从此函数外部使用delete()时,我可以删除该文件。我在Windows上。

3 个答案:

答案 0 :(得分:1)

确保在发生异常时此方法调用JaxbCommon.unmarshalFile(xml, Gen.class);关闭任何流。如果正在读取文件的流处于打开状态,则无法将其删除。

答案 1 :(得分:0)

问题与try / catch无关。您是否有权删除该文件?

如果您使用的是Java 7,则可以使用我认为实际会抛出IOException的Files.delete(Path)以及无法删除文件的原因。

答案 2 :(得分:0)

对try / catch块使用java.io.File.delete()没有一般限制。

许多java.io.File方法的行为可能取决于运行应用程序的平台/环境。这是因为他们需要访问文件系统资源。

例如,以下代码在Windows 7上返回false,在Ubuntu 12.04上返回true

public static void main(String[] args) throws Exception {       
    File fileToBeDeleted = new File("test.txt");

    // just creates a simple file on the file system
    PrintWriter fout = new PrintWriter(fileToBeDeleted);

    fout.println("Hello");

    fout.close();

    // opens the created file and does not close it
    BufferedReader fin = new BufferedReader(new FileReader(fileToBeDeleted));

    fin.read();

    // try to delete the file
    System.out.println(fileToBeDeleted.delete());

    fin.close();
}

因此,真正的问题可能取决于几个因素。但是,它与驻留在try / catch块上的代码无关。

也许,您尝试删除的资源已打开,未被其他进程关闭或锁定。