0

我想要发生的是,当我的项目完成时,它创建的文件被删除(因此其中的所有文件都被删除)。我所做的是

public void delete() {
    File f = new File (JavCapture.tmpLocation + "/tmp");
    if (f.isDirectory()) {
        f.delete();
        System.out.println("Deleted tmp folder!");
    }
}

这不仅不会删除文件夹,而且也不会执行 print 语句,这意味着(我认为这意味着)目录不存在,但确实存在。

我也用这个来定位。

new File(tmpLocation + "/tmp").mkdir();
4

6 回答 6

1

你可以尝试这样的事情:

    public static boolean delete(final File directory){
    assert directory != null && directory.exists();
    if(!directory.isDirectory())
        return directory.delete();
    for(final File f : directory.listFiles())
        delete(f);
    return directory.delete();
}
于 2013-08-16T13:57:57.447 回答
0

此方法只能删除空文件夹。编写一个递归方法,先递归删除所有文件,然后再删除父文件夹。

 void delete(File file) {
   if (file.isFile) 
      file.delete();
   else {
      for (File sub: file.listFiles()) 
        delete(sub);
      file.delete();
   }
 }
于 2013-08-16T13:56:54.277 回答
0

大多数时候,删除目录的语义与删除文件的语义不同。通常,您需要递归到目录并删除目录中的所有内容,然后才能删除目录。

正如@Audrius 所说,您必须先删除目录中的所有文件,以及目录中的所有目录,然后才能删除目录。

由于程序出错,打印语句未执行。如果文件的“删除”实现是正常的,您应该会看到一条错误消息;你是否以某种方式抑制了错误?

于 2013-08-16T13:59:34.320 回答
0

问题是如果包含某些内容,您将无法删除目录。所以你必须递归删除目录的内容!

在 Java 7 中:

public class DeleteDirVisitor extends SimpleFileVisitor<Path> {

private Path baseDir;

public DeleteDirVisitor() {
}

/**
 * If baseDir is specified all the subdirectory will be deleted but not basedir
 * 
 * @param baseDir
 */
public DeleteDirVisitor(Path baseDir) {
    this.baseDir = baseDir;
}

@Override
public FileVisitResult postVisitDirectory(Path dir, IOException e) throws IOException {
    if ((baseDir == null) || !dir.equals(baseDir)) {
        Files.delete(dir);
    }
    return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
    Files.delete(file);
    return FileVisitResult.CONTINUE;
}

}

并使用:

Files.walkFileTree(Paths.get(new File("Your Path").getAbsolutePath()), new DeleteDirVisitor());
于 2013-08-16T14:00:28.587 回答
0

您可以在 Apache Commons IO 中使用 FileUtils.deleteDirectory() 方法

于 2013-08-16T14:02:18.830 回答
0

在 Java 8 中,我使用此代码删除文件夹及其下的所有内容:

    Path path = Paths.get("tmp");
    if (Files.exists(path)) {
        List<Path> allFiles = new ArrayList<Path>();
        Files.walk(path).forEach(pa -> allFiles.add(pa));
        Collections.reverse(allFiles);
        allFiles.forEach(pa -> {try {System.out.println("deleting " + pa);Files.delete(pa);} catch(IOException e){}});
    }

删除最后一行中的 System.out 以进行静默删除。

于 2015-06-15T09:15:07.790 回答