今天一位运维兄弟不小心在服务器上创建了无限递归的目录,急冲冲的拜托我帮忙。
好的,直接写了一个递归删除目录。
结果却出乎意料,一个递归目录删除,而另外一个死活删除不掉。刚开始怀疑是文件被占用,后来排除,之后尝试了各种工具,文件粉碎器都没有解决。
file.delete()返回false,为什么呢?
后来发现file.renameTo()返回成功,然后修改如下:
小知识共享下:文件删除失败后,可考虑重命名,解决路径过长问题。
file.delete()返回false,除了文件被占用还有什么原因呢?
好的,直接写了一个递归删除目录。
import java.io.File;
/*
* 递归删除目录
*/
public class Test {
public static void main(String[]args){
File f1 = new File("d:\\Bytter\\1");
Test t = new Test();
if(f1.isDirectory()){
t.deleteAllFiles(f1);
}
}
private void deleteAllFiles(File f) {
if(f.exists()) {
File[] files = f.listFiles();
if(files != null) {
for(int i =0; i < files.length; i++){
File file =files[i];
if(file.isDirectory()) {
deleteAllFiles(file);
boolean b = file.delete();
if(b){
System.out.println("删除目录" + file.getName() + "成功!");
}else{
System.out.println("删除目录" + file.getPath() +"___" + file.getName() + "失败!");
}
}
else if(file.isFile()) {
boolean b = file.delete();
if(b){
System.out.println("删除文件" + file.getName() + "成功!");
}else{
System.out.println("删除文件" + file.getPath() +"___" + file.getName() + "失败!");
}
}
}
}
}
}
}结果却出乎意料,一个递归目录删除,而另外一个死活删除不掉。刚开始怀疑是文件被占用,后来排除,之后尝试了各种工具,文件粉碎器都没有解决。
file.delete()返回false,为什么呢?
后来发现file.renameTo()返回成功,然后修改如下:
import java.io.File;
/*
* 批量重命名,然后用Test.java
*/
public class Test1 {
private long no = 0;
public static void main(String[]args){
File f1 = new File("d:\\Bytter\\1");
Test1 t = new Test1();
File f3 = new File("d:\\Bytter\\temp");
if(!f3.exists()){
f3.mkdirs();
}
if(f1.isDirectory()){
t.deleteAllFiles(f1);
}
}
private void deleteAllFiles(File f) {
if(f.exists()) {
File[] files = f.listFiles();
if(files != null) {
for(int i =0; i < files.length; i++){
File file =files[i];
if(file.isDirectory()) {
deleteAllFiles(file);
boolean b = file.renameTo(new File("d:\\Bytter\\temp" + File.separator + no));
if(!b){
System.out.println("目录" + file.getName() + "不能重命名!");
return;
}
no ++;
}
else if(file.isFile()) {
boolean b = file.renameTo(new File("d:\\Bytter\\temp" + File.separator + no));
if(!b){
System.out.println("文件" + file.getName() + "不能重命名!");
return;
}
no ++;
}
}
}
}
}
}小知识共享下:文件删除失败后,可考虑重命名,解决路径过长问题。
file.delete()返回false,除了文件被占用还有什么原因呢?
683

被折叠的 条评论
为什么被折叠?



