博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
File类的使用——遍历所有文件及子文件以及遍历删除
阅读量:3963 次
发布时间:2019-05-24

本文共 2689 字,大约阅读时间需要 8 分钟。

遍历所有文件和子文件

通过文件流遍历,核心就是【递归】,递归的基线就是文件层级,如果是文件夹层级,则调用自己,进行递归。

这里在格式上还进行了约束,要求按照如下格式进行输出打印,以方便阅读。

|D:\Java\practice|__D:\Java\practice\.metadata|____D:\Java\practice\.metadata\.lock|____D:\Java\practice\.metadata\.log

这里将遍历封装了函数,然后将格式打印封装为另一个函数,在遍历方法内部调用了private类修饰的格式打印函数。

/***遍历文件和文件夹*@param dir File类对象*@param level int类型,表示当前File的文件夹级别,用于调用getSeparatro()方法,以确定格式打印*/public static void listDir(File dir, int level) {
System.out.println(getSeparatro(level) + dir.toString()); //父目录打印,标识作用,可以删除 File[] files = dir.listFiles(); level++; //递归,每次会【溯回】操作,对应文件夹的等级会被记录 if (null != files && 0 < files.length) {
for (File file : files) {
//判断是否为文件夹,如果是,则递归,直到基线为文件为止 if (file.isDirectory()) {
listDir(file, level); } else {
System.out.println(getSeparatro(level) + file); } } }}/*** 判断生成多少分隔符* @param level 0表示没有分隔符* @return String类型,返回目录前面的标识符*/private static String getSeparatro(int level) {
StringBuilder sb = new StringBuilder(); sb.append("|"); for (int i = 0; i < level; i++) {
sb.append("__"); } return sb.toString();}//打印结果|D:\Java\practice|__D:\Java\practice\.metadata|____D:\Java\practice\.metadata\.lock|____D:\Java\practice\.metadata\.log|____D:\Java\practice\.metadata\.mylyn|______D:\Java\practice\.metadata\.mylyn\.taskListIndex|________D:\Java\practice\.metadata\.mylyn\.taskListIndex\segments_1|________D:\Java\practice\.metadata\.mylyn\.taskListIndex\write.lock|______D:\Java\practice\.metadata\.mylyn\.tasks.xml.zip|______D:\Java\practice\.metadata\.mylyn\contexts|______D:\Java\practice\.metadata\.mylyn\repositories.xml.zip|______D:\Java\practice\.metadata\.mylyn\tasks.xml.zip|____D:\Java\practice\.metadata\.plugins|______D:\Java\practice\.metadata\.plugins\org.eclipse.buildship.core|______D:\Java\practice\.metadata\.plugins\org.eclipse.core.resources|________D:\Java\practice\.metadata\.plugins\org.eclipse.core.resources\.history|__________D:\Java\practice\.metadata\.plugins\org.eclipse.core.resources\.history\0|____________D:\Java\practice\.metadata\.plugins\org.eclipse.core.resources\.history\0\30b7de5

遍历删除所有文件及子文件

电脑上的软件的卸载,本质都是遍历删除,由于程序只能将空文件夹删除,所以必须依据从内到外,由底层到顶层的顺序去一层层的遍历删除。

public static void deleteFile(File dir) {
File[] files = dir.listFiles(); if (files != null && files.length > 0) {
for (File file : files) {
//判断是否为文件夹,如果是,则递归,直到到达基线(文件层级)为止,然后溯回 if (file.isDirectory()) {
deleteFile(file); } else {
System.out.println(file.toString() + ":" + file.delete()); } } //dir.delete() 方法,返回的是boolean值 System.out.println(dir.toString() + ":" + dir.delete()); }}

转载地址:http://etgzi.baihongyu.com/

你可能感兴趣的文章
ksh 控制结构
查看>>
ksh 函数
查看>>
ksh 复合变量
查看>>
ksh 引用
查看>>
ksh 正则表达式
查看>>
ksh 命令退出状态
查看>>
ksh 文件测试
查看>>
ksh I/O
查看>>
ksh 格式化输出
查看>>
ksh 控制键
查看>>
ksh 动态命令
查看>>
ksh 多进程
查看>>
ksh 命令分隔符
查看>>
Linux 精萃
查看>>
sed 精萃
查看>>
awk 精萃
查看>>
awk 简介
查看>>
awk 调用方式
查看>>
awk 注释
查看>>
awk 命令分隔符
查看>>