我尝试使用java删除一个目录,这里是我的代码
public static voID delDirectory(String path) throws IOException { Path p = Paths.get(path); delHelp(p); } private static voID delHelp(Path p) throws IOException { if (!p.tofile().exists()) { return; } else if(p.tofile().isfile()){ log.deBUG("delete file:" + p.toabsolutePath().toString()); files.delete(p); }else if(p.tofile().isDirectory()){ for(Path subPath:files.newDirectoryStream(p)){ delHelp(subPath); } log.deBUG("delete directory:"+p.toabsolutePath().toString()); files.delete(p); } }
在类Unix系统上,它运行起来。 在windows上,代码files.delete(p)实际上将目录移动到垃圾桶,所以当删除父目录时,代码将抛出exception: Exception in thread "main" java.nio.file.DirectoryNotEmptyException
任何关于这个os依赖的行为的想法? 我该如何解决这个问题?
files.createTempDirectory(“”)抛出NullPointerException
c编程检查是否按下键不停止程序
检测应用程序挂起
将stdout C文件streamredirect到缓冲区
需要将maven的$ {project.basedir}从单个反斜杠转换为double
为什么不是config.cache_classes = false工作?
windows安装rmagick错误
在使用C#/ .Net时,只读如何影响目录?
学习windows服务与C + +
从windows中的提示运行python脚本
实际的问题是,您不关闭DirectoryStream ,当您尝试删除DirectoryNotEmptyException时导致DirectoryNotEmptyException 。
从Javadoc :
当不使用try-with-resources构造时,应在迭代完成后调用目录流的close方法,以释放为打开的目录保存的任何资源。
所以你可以在完成之后调用close() ,或者在try-with-resources中使用它:
private static voID delHelp(Path p) throws IOException { if (!p.tofile().exists()) { return; } else if(p.tofile().isfile()){ files.delete(p); } else if(p.tofile().isDirectory()){ try (DirectoryStream<Path> ds = files.newDirectoryStream(p)) { for (Path subPath : ds){ delHelp(subPath); } } files.delete(p); } }
请首先将此Jar添加到您的项目中。
下面的代码也可以按照你的要求完美的工作。
即在窗口机上工作,不应该去垃圾/回收站
public static voID main(String[] args) { try { delDirectory("E:\RecursiveDataContainDirectoryname"); } catch (Exception e) { e.printstacktrace(); } } public static voID delDirectory(String path) throws IOException { Path p = Paths.get(path); fileDeleteStrategy.FORCE.delete(p.tofile()); }
总结以上是内存溢出为你收集整理的java在Windows中删除目录全部内容,希望文章能够帮你解决java在Windows中删除目录所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)