递归

键盘输入文件夹路径,计算文件夹大小

package com.huang.digui;

import java.io.File;
import java.util.Scanner;

public class Test1 {

public static void main(String[] args) {
	//获取文件夹的大小
	File dir = getFile();
	long len = getLongth(dir);
	System.out.println(len);
}



public static File getFile() {//获取文件夹对象
	Scanner sc = new Scanner(System.in);
	while(true) {
		System.out.println("输入一个文件夹路径");
		String line = sc.nextLine();
		File dir = new File(line);
		if(!dir.exists()) {
			System.out.println("您输入的是文件夹不存在");
		}else if(dir.isFile()) {
			System.out.println("您输入端的是一个文件");
		}else {
			return dir;
		}
	}

}
private static long getLongth(File dir) {//计算文件夹大小
	long len = 0;
	File[] subFiles = dir.listFiles();
	for (File subFile : subFiles) {
		if(subFile.isFile()) {
			len = len + subFile.length();
		}else {
			len = len + getLongth(subFile);
		}
	}
	return len;
}

检测如果是文件就删除

package com.huang.digui;

import java.io.File;

public class Test2 {

public static void main(String[] args) {
	//如果是文件家就删除
	File dir = Test1.getFile();
	deleteFile(dir);
}

public static void deleteFile(File dir) {
	File[] subFiles = dir.listFiles();
	for (File file : subFiles) {
		if (file.isFile()) {
			file.delete();
		}else {
			deleteFile(file);
		}
	}
	dir.delete();
}

}

文件夹拷贝,从键盘接受两个文件,把其中的一个文件拷贝到另一个上

1,目标文件创建源文件夹
2,获取源文件夹中的所有文件和文件夹,存储在file的数组中】
遍历数组
如果是文件就读写,如果是文件夹是递归调用
public static void copy(File src, File dest) throws IOException {
//目标文件创建源文件夹
File newdir = new File(dest, src.getName());
newdir.mkdir();
File[] subFiles = src.listFiles();
for (File file : subFiles) {
if(file.isFile()) {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bos =
new BufferedOutputStream(new FileOutputStream(new File(newdir,file.getName()) ));
int b;
while((b=bis.read())!=-1) {
bos.write(b);
}
bis.close();
bos.close();
}else {
copy(file, newdir);
}
}
}
}

把文件夹的所有文件按照层级打印出来

1,获取所有的文件和文件夹,返回file的数组
2,遍历数组
3,需要打印所有的文件和文件夹
4,如果是文件夹就递归调用
public static void printFile(File dir, int i) {
File[] subfiles = dir.listFiles();
for (File file : subfiles) {
for (int j = 0; j < i; j++) {
System.out.print("\t");
}
System.out.println(file);//无论是文件还是文件夹都需要打印出来
if(file.isDirectory()) {
printFile(file,i+1);//如果是文件夹就需要递归调用
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值