JAVA 文件无法删除怪异解决 .delete()无效,但返回true 递归删除文件
2014-09-20 23:18
549 查看
最近做一个项目,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;
}
}
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;
}
}
相关文章推荐
- jetty java文件无法删除 java文件占用 delete无效 运行时锁定静态资源的解决方法
- 无法删除Java(TM) Platform SE binary打开问题解决(修改jar中的文件)
- java zip压缩优化版 解决压缩后文件一直被占用无法删除
- 文件无法删除java.io.IOException: Unable to delete
- java调用文件删除方法delete()时无法删除文件
- java zip压缩优化版 解决压缩后文件一直被占用无法删除
- C#删除只读文件或文件夹(解决File.Delete无法删除文件)
- java File delete 无法删除文件的原因。
- C#删除只读文件或文件夹(解决File.Delete无法删除文件)
- 关于System.gc()解决File的Delete和DeleteOnExit()删除文件无效的问题——已解决
- 硬盘文件无法删除(360强力删除无效)的解决方法
- Java无法删除被占用资源文件解决办法(IO流的关闭)
- 文件夹无法访问拒绝访问,无法删除文件的,快速有效解决方法
- 解决--oracle oci.dll 文件无法删除
- 【搜集】U盘上的文件无法复制或删除的解决方法
- “无法删除 文件:无法读源文件或磁盘”-文件夹无法删除的最终而有效的解决方法
- Linux下链接文件使用rm无法删除的解决办法
- 文件无法删除的各种解决办法
- Windows中无法删除文件的解决办法
- 如何解决文件无法删除的情况