JAVA 文件无法删除怪异解决 .delete()无效,但返回true 递归删除文件
最近做一个项目,springMVC 一个类文件上传后,另一类对该文件操作后删除,
file.delete(),打印返回true,但是文件没有被成功删除
手动删除,提示正在被jvm占用。
怀疑操作流没有关闭,检查,未发现。
改用FileUtils.deleteQuietly(),问题依旧。
怀疑引用类有未知bug,于是专门写一个类,只进行删除操作,问题依旧。
正在烦躁,无意间将web窗口重启,一直是用jetty跑的,这次无意选了tomcat
奇迹出现,问题解决了。回到jetty问题复现。
不知道原因,google未果……算是多了一种解决问题的思路,代码上找不到突破口,换换容器试试,说不定柳暗花明。
提供一个文件删除的类。备用。
- public class Delfile {
- /**
- * 删除某个文件夹下的所有文件夹和文件
- *
- * @param delpath
- * String
- * @throws FileNotFoundException
- * @throws IOException
- * @return boolean
- */
- public static boolean deletefile(String delpath) throws Exception {
- try {
- File file = new File(delpath);
- // 当且仅当此抽象路径名表示的文件存在且 是一个目录时,返回 true
- if (!file.isDirectory()) {
- file.delete();
- } else if (file.isDirectory()) {
- String[] filelist = file.list();
- for (int i = 0; i < filelist.length; i++) {
- File delfile = new File(delpath + "\\" + filelist[i]);
- if (!delfile.isDirectory()) {
- delfile.getAbsoluteFile().delete();
- System.out .println(delfile.getAbsolutePath() + "删除文件成功");
- } else if (delfile.isDirectory()) {
- deletefile(delpath + "\\" + filelist[i]);
- }
- }
- System.out.println(file.getAbsolutePath()+"删除成功");
- file.getAbsoluteFile().delete();
- }
- } catch (FileNotFoundException e) {
- System.out.println("deletefile() Exception:" + e.getMessage());
- }
- return true;
- }
- /**
- * 输出某个文件夹下的所有文件夹和文件路径
- *
- * @param delpath
- * String
- * @throws FileNotFoundException
- * @throws IOException
- * @return boolean
- */
- public static boolean readfile(String filepath)
- throws FileNotFoundException, IOException {
- try {
- File file = new File(filepath);
- System.out.println("遍历的路径为:" + file.getAbsolutePath());
- // 当且仅当此抽象路径名表示的文件存在且 是一个目录时(即文件夹下有子文件时),返回 true
- if (!file.isDirectory()) {
- System.out.println("该文件的绝对路径:" + file.getAbsolutePath());
- System.out.println("名称:" + file.getName());
- } else if (file.isDirectory()) {
- // 得到目录中的文件和目录
- String[] filelist = file.list();
- if (filelist.length == 0) {
- System.out.println(file.getAbsolutePath()
- + "文件夹下,没有子文件夹或文件");
- } else {
- System.out
- .println(file.getAbsolutePath() + "文件夹下,有子文件夹或文件");
- }
- for (int i = 0; i < filelist.length; i++) {
- File readfile = new File(filepath + "\\" + filelist[i]);
- System.out.println("遍历的路径为:" + readfile.getAbsolutePath());
- if (!readfile.isDirectory()) {
- System.out.println("该文件的路径:"
- + readfile.getAbsolutePath());
- System.out.println("名称:" + readfile.getName());
- } else if (readfile.isDirectory()) {
- System.out.println("-----------递归循环-----------");
- readfile(filepath + "\\" + filelist[i]);
- }
- }
- }
- } catch (FileNotFoundException e) {
- System.out.println("readfile() Exception:" + e.getMessage());
- }
- return true;
- }
- }