Java 目录是';不要被删除
我想做的是,当我的项目完成时,它创建的文件将被删除(以便删除其中的所有文件)。我所做的是Java 目录是';不要被删除,java,file,directory,Java,File,Directory,我想做的是,当我的项目完成时,它创建的文件将被删除(以便删除其中的所有文件)。我所做的是 public void delete() { File f = new File (JavCapture.tmpLocation + "/tmp"); if (f.isDirectory()) { f.delete(); System.out.println("Deleted tmp folder!"); } } 这不仅不会删除文件夹,也不会执行pr
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();
使用此方法只能删除空文件夹。编写一个递归方法,首先递归删除所有文件,然后再删除父文件夹
void delete(File file) {
if (file.isFile)
file.delete();
else {
for (File sub: file.listFiles())
delete(sub);
file.delete();
}
}
您可以尝试以下方法:
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();
}
大多数情况下,删除目录的语义与删除文件的语义不同。通常,在删除该目录之前,需要递归到该目录并删除该目录中的所有内容 正如@Audrius所说,在删除目录之前,必须先删除目录中的所有文件和目录中的所有目录 print语句未执行,因为程序出错。
如果文件的“delete”实现正常,您应该会看到一条错误消息;您是否以某种方式抑制了错误?问题是,如果目录包含某些内容,则无法删除该目录。所以你必须递归删除目录的内容 在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;
}
您可以在Java 8中的Apache Commons IO中使用FileUtils.deleteDirectory()方法。我使用以下代码删除文件夹及其下的所有内容:
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){}});
}
Path Path=Path.get(“tmp”);
if(Files.exists(path)){
List allFiles=new ArrayList();
Files.walk(path.forEach(pa->allFiles.add(pa));
集合。反向(所有文件);
allFiles.forEach(pa->{try{System.out.println(“删除”+pa);Files.delete(pa);}catch(IOException e){});
}
删除最后一行中的System.out以进行静默删除。打印文件位置,它可能不是您所想的。要删除目录,您必须首先确保它为空,这意味着目录中没有文件。请尝试捕获异常(将创建目录链接到try catch块中的delete调用的代码括起来)和打印堆栈跟踪。这可能会为您提供有关出错原因的指针。是否有任何方法可以删除目录中的所有内容?因为我需要删除目录中的内容,但有多个文件。您可以使用Apache Commons中的FileUtils.deleteDirectory方法IORE方法不考虑可能存在以下情况的目录:在一个目录中。谢谢,现在已经修复了。只对一个方法使用整个依赖关系似乎有点极端,你不觉得吗?
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){}});
}