黑马程序员技术交流社区
标题:
File类中的文件删除问题?
[打印本页]
作者:
金肖
时间:
2012-5-5 19:17
标题:
File类中的文件删除问题?
File类中如何删除一个带内容的目录(包括子目录中的内容)?
作者:
谭景宾
时间:
2012-5-5 20:07
public static void deleteDir(File dir) {
if (dir == null || !dir.exists() || !dir.isDirectory())
return; // 检查参数
for (File file : dir.listFiles()) {
if (file.isFile())
file.delete(); // 删除所有文件
else if (file.isDirectory())
deleteDir(file); // 递规的方式删除文件夹
}
dir.delete();// 删除目录本身
}
需要注意的是,如果删除的文件中包含有系统正在使用的文件时,文件不会被删除掉,不过也不会发生错误,只是将可以删除的文件全部删除了。
作者:
Kristy_Li
时间:
2012-5-5 20:09
在java中没有直接删除非空目录的方法,所以要自己编写方法来删除,代码很简单:
public void deleteDir(File dir)
{
for (File file : dir.listFiles():)
{
if (file.isFile())
file.delete(); // 删除所有文件
else if (file.isDirectory())
deleteDir(file);
}
dir.delete();// 删除目录本身
} 需要注意的是,如果删除的文件中包含有系统正在使用的文件时,文件不会被删除掉。 另外通过调用:deleteDir(new File(System.getProperty("java.io.tmpdir")));可以删除系统的临时文件
作者:
倪杭乘
时间:
2012-5-5 20:10
自己写的,关键是使用递归,判断是否是文件夹
public class DelDirs {
/**
* 删除多级目录
* 思路:创建主目录对象
* 对目录进行展开,如果目录中还有目录使用递归(调用本方法)来最终获得文件
*/
public static void main(String[] args) {
File f = new File("d:\\da");
del(f);
}
public static void del(File dir) {
File[] files = dir.listFiles(); //展开目录下文件及文件夹
for(int x = 0;x<files.length;x++){ //遍历所有文件和文件夹
if(files[x].isDirectory()){ //如果是文件夹的话递归
del(files[x]); //使用递归找出最底级目录
}
}
dir.delete();
}
}
复制代码
作者:
徐慧书
时间:
2012-5-5 21:11
递归虽然简单效率却很低,
我就来个深度优先搜素删除文件的非递归实现吧,主要靠栈技术
直接上代码了:
import java.io.File;
import java.util.Stack;
public class Test
{
public static void main(String[] args)
{
File f=new File("c:\\test"); //任意一个File(文件或是文件夹)
deleteDir(f);
}
public static void deleteDir(File dir)
{
if(dir == null || (!dir.isDirectory() && !dir.isFile())) //如果为空或者非法直接返回
{
return;
}
if(dir.isFile())//如果传入的是文件便直接删除返回
{
dir.delete();
return;
}
Stack<File> list = new Stack<File>(); //定义栈,注意这个栈只存储文件夹(目录)不存储文件
list.push(dir);
while(!list.isEmpty()) //只要栈非空,就继续
{
File file = list.peek(); //获取栈顶元素(一定为文件夹(目录)),不弹出
if(file.listFiles().length == 0) //如果这个目录为空,则直接从栈定弹出并删除 然后继续循环
{
list.pop();
file.delete();
continue;
}
for(File file2:file.listFiles()) //否则迭代这个目录
{
if(file2.isFile()) //如果是文件直接删除不压栈
file2.delete();
else
list.push(file2);//如果是目录则压栈
}
}
}
}
哦了
作者:
谭景宾
时间:
2012-5-5 21:49
徐慧书 发表于 2012-5-5 21:11
递归虽然简单效率却很低,
我就来个深度优先搜素删除文件的非递归实现吧,主要靠栈技术
哥们确实很给力,我也学习了。赞
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2