File.delete有些文件不能删除,而Files.delete(path)可以,进行深入探究其原因

前言

最近更换deepin系统,在其上做项目,发现运行Java程序,File.delete有的目录下的文件,不能删除,有的能删除,反复对比文件属性及操作权限,均不得其解,最后发现采用Paths和Files得到解决!

我的问题

package com.stati.test;import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;import org.apache.commons.io.FileUtils;import ch.qos.logback.core.util.FileUtil;public class TestFile {public static void main(String[] args) throws IOException, InterruptedException {File file = new File("/home/tmpuser/tmp/test1/"); // 获取其file对象File[] files = file.listFiles(); // 遍历path下的文件和目录,放在File数组中for (File f : files) { // 遍历File[]数组boolean flag = FileUtils.deleteQuietly(f); System.out.println("------------------------"+flag); if (f.delete()) // 若非目录(即文件),则打印 System.out.println("---删除文件成功----" + f.getAbsolutePath()); if (f.exists()) { // System.gc(); Process process = Runtime.getRuntime().exec("rm -rf "+f.getAbsolutePath()); int exitValue = process.waitFor(); if (0 != exitValue) { System.out.println("删除文件失败---" + f.getAbsolutePath()); } else { System.out.println("删除文件成功---" + f.getAbsolutePath()); } // System.out.println("---删除文件成功----" + f.getAbsolutePath()); }}}}

以上代码捣鼓好久,硬是对/home/tmpuser/tmp/test1下的文件,删除不掉,无论我是重建目录,更改权限,都是失败!

以上代码我我采用至少三种方法:

1、FileUtils.deleteQuietly(f)

2、f.delete()

3、Runtime.getRuntime().exec("rm -rf "+f.getAbsolutePath()); 

均没有起作用,当时在网上,不断搜寻解决方案,反复都是一下三种:

1、多线程操作;
2、打开的文件流没有关闭;
3、需要垃圾回收下System.gc(); 。

我也反复核对我的项目代码,反复尝试,均不行!深入DEBUG代码,发现security == null

百思不得其解,说我的系统不安全(我的是deepin系统,大概1周没有重启电脑了),但是有一个目录可以删除……暂停!但是我想到jdk8中的Files、Path,居然解决了我的问题!

删除文件用jdk8的Files.delete(path)

package com.stati.test;import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
imp


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部