我想要发生的是,当我的项目完成后,它创建的文件将被删除(以便删除其中的所有文件)。我的工作是
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();
答案 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以进行静默删除。