0

我将首先发布我的代码:

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 上。

4

3 回答 3

1

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

于 2013-08-05T19:52:34.540 回答
0

该问题与 try/catch 无关。你有删除文件的权限吗?

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

于 2013-08-05T19:46:42.707 回答
0

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

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

例如,以下代码false在 Windows 7 和trueUbuntu 12.04 上返回:

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 块上的代码无关。

也许,您尝试删除的资源已打开,而不是被另一个进程关闭或锁定。

于 2013-08-05T20:12:07.957 回答