目录未被删除

时间:2013-08-16 13:52:24

标签: java file directory

我想要发生的是,当我的项目完成后,它创建的文件将被删除(以便删除其中的所有文件)。我的工作是

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();

6 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

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

 void delete(File file) {
   if (file.isFile) 
      file.delete();
   else {
      for (File sub: file.listFiles()) 
        delete(sub);
      file.delete();
   }
 }

答案 2 :(得分:0)

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

正如@Audrius所说,在删除目录之前,必须首先删除目录中的所有文件以及目录中的所有目录。

print语句未执行,因为程序错误输出。 如果文件的'delete'实现是理智的,那么您应该看到一条错误消息;你以某种方式压制错误吗?

答案 3 :(得分: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());

答案 4 :(得分:0)

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

答案 5 :(得分: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以进行静默删除。