思路

main中调用visit函数,递归访问每个文件夹

visit函数中调用calculateSize函数,递归计算当前文件夹的大小,然后输出当前文件路径、文件大小

代码

版本1:输出到控制台

package cn.hanquan.test;

import java.io.*;

/*
 * 递归套递归,计算每个文件夹大小
 */
public class DirCount {
	public static String SRC = "C:\\Users\\Bug\\Desktop\\College Files\\4-毛概";

	/* ------递归遍历文件夹 递归函数------
	 * 参数:	File f	要访问的文件/文件夹
	 * 			int i	递归深度
	 * 返回值:	无
	 */
	public static void visit(File f, int i) {

		for (int j = 0; j < i; j++) {
			System.out.print("-");
		}
		System.out.println(f.getPath() + "\t\t大小:" + calculateSize(f, 0));

		if (f.isDirectory())
		{
			File[] files = f.listFiles();
			for (File t : files) {
				visit(t, i + 1);
			}
		}
	}

	/* --------计算文件大小 递归函数--------
	 * 参数:	File f	要计算的文件/文件夹
	 * 			long l	已经计算过的文件累计大小
	 * 返回值:	文件  File f 的大小
	 */
	public static long calculateSize(File f, long l) {

		long curLen = l;
		
		if (f.isFile())						// 文件
			return f.length();
		
		if (f != null && f.exists()) {		// 文件夹
			for (File s : f.listFiles()) {
				if (s.isFile()) {
					curLen += s.length();
				} else {
					curLen = calculateSize(s, curLen);// 递归访问 并接收其所有子文件夹的累计大小
				}
			}
		}
		return curLen;
	}

	public static void main(String[] args) {
		visit(new File(SRC), 0);
	}
}

运行效果

C:\Users\Bug\Desktop\College Files\4-毛概		大小:3090637
-C:\Users\Bug\Desktop\College Files\4-毛概\中国人你要自信.docx		大小:21229
-C:\Users\Bug\Desktop\College Files\4-毛概\中国人你要自信.txt		大小:14659
-C:\Users\Bug\Desktop\College Files\4-毛概\复习资料		大小:1398883
--C:\Users\Bug\Desktop\College Files\4-毛概\复习资料\毛概 - 副本.docx		大小:60321
--C:\Users\Bug\Desktop\College Files\4-毛概\复习资料\毛概.docx		大小:60321
--C:\Users\Bug\Desktop\College Files\4-毛概\复习资料\毛概23页 new.pdf		大小:467120
--C:\Users\Bug\Desktop\College Files\4-毛概\复习资料\毛概23页 new_带考题批注.pdf		大小:385908
--C:\Users\Bug\Desktop\College Files\4-毛概\复习资料\毛概23页.pdf		大小:401976
--C:\Users\Bug\Desktop\College Files\4-毛概\复习资料\答题方式.txt		大小:361
--C:\Users\Bug\Desktop\College Files\4-毛概\复习资料\考试样题.docx		大小:22876
-C:\Users\Bug\Desktop\College Files\4-毛概\材料分析题.docx		大小:19872
-C:\Users\Bug\Desktop\College Files\4-毛概\毛概		大小:733818
--C:\Users\Bug\Desktop\College Files\4-毛概\毛概\毛概		大小:733818
---C:\Users\Bug\Desktop\College Files\4-毛概\毛概\毛概\2017毛概复习知识点.pdf		大小:308882
---C:\Users\Bug\Desktop\College Files\4-毛概\毛概\毛概\毛概 (合).docx		大小:27327
---C:\Users\Bug\Desktop\College Files\4-毛概\毛概\毛概\毛概1-9章题库全 - 副本.doc		大小:119296
---C:\Users\Bug\Desktop\College Files\4-毛概\毛概\毛概\毛概1-9章题库全.doc		大小:121344
---C:\Users\Bug\Desktop\College Files\4-毛概\毛概\毛概\毛概整理.docx		大小:35563
---C:\Users\Bug\Desktop\College Files\4-毛概\毛概\毛概\毛概期末考试题库(2015年最新).docx		大小:106432
---C:\Users\Bug\Desktop\College Files\4-毛概\毛概\毛概\研究性学习.docx		大小:14974
-C:\Users\Bug\Desktop\College Files\4-毛概\毛概.rar		大小:608019
-C:\Users\Bug\Desktop\College Files\4-毛概\毛概1,6章.docx		大小:16868
-C:\Users\Bug\Desktop\College Files\4-毛概\毛概1113.docx		大小:28689
-C:\Users\Bug\Desktop\College Files\4-毛概\毛概25页.docx		大小:53264
-C:\Users\Bug\Desktop\College Files\4-毛概\毛概期末选择题题库.doc		大小:131584
-C:\Users\Bug\Desktop\College Files\4-毛概\第7,8章.docx		大小:19061
-C:\Users\Bug\Desktop\College Files\4-毛概\第9、10章.docx		大小:22610
-C:\Users\Bug\Desktop\College Files\4-毛概\第四、五章.docx		大小:22081

文件夹界面

java 大文件唯一标识计算 java文件大小计算_Desktop

版本2:输出txt文件

package cn.hanquan.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;

//简单的txt文件复制
public class FileOutputStreamTest {

	public static String SRC = "C:\\Users\\Bug\\Desktop\\College Files\\0-区块链";
	static StringBuilder str = new StringBuilder();

	public static void main(String[] args) throws IOException {

		visit(new File(SRC), 0);
		
		FileWriter fos = new FileWriter("C:\\Users\\Bug\\Desktop\\newFileList.txt");
		byte[] bbuf = new byte[32];
		fos.write(str.toString());
		fos.close();
		
		//System.out.println(str);
	}

	public static void visit(File f, int i) throws IOException {

		for (int j = 0; j < i; j++) {
			str.append("-");
			System.out.print("-");
		}
		str.append(f.getPath() + "\t\t大小:" + calculateSize(f, 0) + "\r\n");
		System.out.println(f.getPath() + "\t\t大小:" + calculateSize(f, 0));

		if (f.isDirectory()) {
			File[] files = f.listFiles();
			for (File t : files) {
				visit(t, i + 1);
			}
		}
	}

	public static long calculateSize(File f, long l) {

		long curLen = l;

		if (f.isFile()) // 文件
			return f.length();

		if (f != null && f.exists()) { // 文件夹
			for (File s : f.listFiles()) {
				if (s.isFile()) {
					curLen += s.length();
				} else {
					curLen = calculateSize(s, curLen);// 递归访问 并接收其所有子文件夹的累计大小
				}
			}
		}
		return curLen;
	}
}

附:使用CommonsIo组件操作方式,不需要重复造轮子

java 大文件唯一标识计算 java文件大小计算_递归_02