Java专题 IO字节流文件读取+实现(复制文件,计算同类文件数量,计算文件大小,删除某一路径下所有文件)

较为高效的复制文件案例

public static void copy(String d1,String d2) throws IOException {
	File file = new File(d1);
	BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
	BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(d2));
	
	byte[] bs = new byte[8*1024];
	int len;
	while ((len = bis.read(bs))!=-1) {
		bos.write(bs);
	}
	bis.close();
	bos.close();
}

文件复制,与上面的连用

public static void copy_2_1(String yuan,String target) throws IOException {	
	
	File yuanw = new File(yuan);
	if (!yuanw.exists()) {
		System.out.println("文件不存在");
	}
	if (yuanw.isFile()) {
		copy(yuan, target);
		return;
	}
	
	File[] listFiles = yuanw.listFiles();
	File f2 = new File(target);
	if (!f2.exists()) {
		f2.mkdirs();
	}
	for (File file : listFiles) {
		if (file.isFile()) {
			copy(file.getPath(), target+"\\"+file.getName());
		}else {
			copy_2_1(file.getPath(), target+"\\"+file.getName());
		}
	}
}

计算某一路径下拥有相同后缀文件的数量

public static void houZhuiCount(String src) {
	File file = new File(src);
	Map<String, Integer> map = new HashMap<String, Integer>();	//重复调用下 会输出每个文件夹的文件个数
												//定义到方法外可以直接获得每一次统计后累加的效果
	if (!file.exists()) {
		System.out.println("指定目录下没有文件");
	}
	if (file.isFile()) {
		String s0 = file.getName().substring(file.getName().indexOf('.'));
		map.put(s0, map.containsKey(s0)?map.get(s0)+1:1);
	}
	File[] listFiles = file.listFiles();
	for (File f0 : listFiles) {
		if (f0.isFile()) {
			String s1 = f0.getName().substring(f0.getName().indexOf('.'));
			map.put(s1, map.containsKey(s1)?map.get(s1)+1:1);
		}else {
			houZhuiCount(f0.getPath());
		}
	}
	
	Set<String> keySet = map.keySet();
	Iterator<String> iterator = keySet.iterator();
	while (iterator.hasNext()) {
		String next = iterator.next();
		System.out.println(next+" have "+map.get(next));
	}
	
}

计算某一路径下文件大小

public static void totalSize(String src) {
	File file = new File(src);
	long size = 0;			//可将计数变量定义在方法外声明为静态,可以获得最终修改值
	
	if (!file.exists()) {
		System.out.println("指定目录下文件不存在");
	}
	if (file.isFile()) {
		System.out.println("size : "+file.length()/1024+"KB");
	}
	
	File[] listFiles = file.listFiles();
	if (null!=listFiles) {			//展开后判断文件夹是否为空,不空继续遍历,否则跳过
		for (File f0 : listFiles) {
			if (f0.isFile()) {
				size = size+f0.length();
			}else {
				totalSize(f0.getPath());
			}
		}
	}
	System.out.println("size : "+size/1024+"KB");		//每个文件夹下的每个文件
	
}

删除某一路径下所有文件

public static void deleteDir(String src) {
	File file = new File(src);
	
	if (!file.exists()) {
		System.out.println("目录下没有该文件。");
	}
	
	if (file.isFile()) {
		file.delete();
	}
	
	File[] listFiles = file.listFiles();
	if (listFiles!=null) {			//判断空文件夹
		for (File f0 : listFiles) {
			if (f0.isFile()) {
				f0.delete();
			}else {
				deleteDir(f0.getPath());
			}
		}file.delete();				//每一次遍历删除完文件后将空文件删掉
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值