IO递归练习 --递归: 在方法内部调用方法本身 --1,递归求文件夹总大小 --开发步骤: 1,把文件夹里的资源都列出来 listFiles() 2,判断,资源是文件吗?--是就求和 3,判断,资源是文件夹吗?--继续列资源继续判断是文件就求和是文件夹再去列资源再判断再求和 --重复的执行 1 2 3
import java.io.File;
import java.util.Scanner;
//测试 求文件夹总大小
public class C1 {
public static void main(String[] args) {
//1,接收用户输入的 文件夹 路径
String dirpath = new Scanner(System.in).nextLine();
//2,把指定文件 封装成File对象
File dir = new File(dirpath);
//3,调用方法求大小
long count = totalSize(dir);
System.out.println("文件夹路径是:"+dirpath+".总大小是:" + count);
}
//创建方法,求大小
public static long totalSize(File dir) {
// 1,把文件夹里的资源都列出来 listFiles()
File[] fs = dir.listFiles();
long sum = 0 ;//定义变量,记录总和
//遍历数组,获取每个资源fs[i]
for (int i = 0; i < fs.length ; i++) {
if( fs[i].isFile() ){
// 2,判断,资源是文件吗?--是就求和
sum = sum + fs[i].length() ;//递归
}else if( fs[i].isDirectory() ){
// 3,判断,资源是文件夹吗?
//--继续列资源继续判断是文件就求和是文件夹再去列资源再判断再求和 --重复的执行 1 2 3
//递归 -- 就是方法里自己调用自己的现象 --节省代码的编写 -- 比较占内存
sum = sum + totalSize( fs[i] ) ;
}
}
return sum ;//把计算完的结果返回给调用位置
}
}
========================================================================================
import java.io.File;
import java.util.Scanner;
//测试 递归删除文件夹
//1,把文件夹里的资源都列出来 listFiles()
//2,判断,资源是文件吗?--是就直接delete
//3,判断,资源是文件夹吗?--继续列资源继续判断是文件就直接delete
// 是文件夹再去列资源再判断再delete
public class C1{
public static void main(String[] args) {
//1,接收用户输入的 文件夹 路径
String dirpath = new Scanner(System.in).nextLine();
//2,把指定文件 封装成File对象
File dir = new File(dirpath);
//开始删除....
del(dir);
System.out.println("文件夹已删除!");
}
public static void del(File dir) {
//1,把文件夹里的资源都列出来 listFiles()
File[] fs = dir.listFiles();
//遍历数组,获取每个资源fs[i]
for (int i = 0; i < fs.length ; i++) {
//2,判断,资源是文件吗?--是就直接delete
if(fs[i].isFile()){
fs[i].delete();
}else if(fs[i].isDirectory()){
//3,判断,资源是文件夹吗?--继续列资源继续判断是文件就直接delete 是文件夹再去列资源再判断再delete
//递归,重复的干之前的1 2 3几步
del(fs[i]);
}
}
dir.delete();//删除空的文件夹
}
}
原文:https://www.cnblogs.com/liang-shi/p/13861617.html