无法使用Java删除文件

时间:2012-05-09 08:08:45

标签: java file file-io

我已经编写了以下代码来合并和删除源文件,但不知何故源文件没有被删除。任何人都可以对我在这里缺少的东西有所了解。

    public void doDelete(List<String> dID)throws  IOException {

        String DID=null;

        try{
            for( ListIterator<String> iterator = dID.listIterator(); iterator.hasNext();)
            {

                DID= (String) iterator.next();

                System.out.println("Deleting PDF" +DID);
                File f =new File("E:\\TestFolder"+ "\\" +DID+".pdf");
                 if (!f.exists()) {
                        System.err.println("File " + f
                            + " not present to begin with!");
                        return;
                      }
                System.out.println(f.length());
                System.out.println(f.getAbsolutePath());
                boolean success = f.delete();
                if (!success){
                    System.out.println("Deletion failed.");               
                }else{
                    System.out.println("File deleted."+DID);
                }
            }
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();             
        }
    }   
}

2 个答案:

答案 0 :(得分:2)

TL; DR但文件删除失败通常是由于文件仍处于打开状态。特别是当你在Windows上运行它时。 如果您想了解删除失败的原因,您可以使用Java 7文件API,它会将删除失败原因作为例外。

java.nio.Files.delete(...)

http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#delete(java.nio.file.Path

答案 1 :(得分:0)

在createFileFromBlob方法中,您打开多个FileOutputStreams(对于dID.listIterator()的每个元素),但只关闭finally块中的最后一个元素。这将为除了最后一个文件之外的所有文件保留一个打开的句柄,防止它们被Pulsar的答案删除。