JavaIO统计一个文件夹,文件,文件夹,所有字节的大小

这里以我的JDK文件夹为例:

package com.data.io;

import java.io.File;
/**
 * App.java
 * @author Administrator
 *
 */
public class App {
    public static void main(String[] args) {
        File file = new File("G:/jdk1.8.0_131");
        FileInfo info = Model.getFileInfo(file);
        info.print();
    }
}
package com.data.io;
import java.io.*;
/**
 * FileInfo.java 
 * 文件信息
 * @author Administrator
 *
 */
public class FileInfo {
    /**
     * 文件(目录)的大小 (字节)
     */
    private long size;
    private int fileSize;
    private int folderSize;
    private File file;
    
    public FileInfo(File file) {
        this.file = file;
    }
    public long getSize() {
        return size;
    }
    public void setSize(long size) {
        this.size = size;
    }
    public int getFileSize() {
        return fileSize;
    }
    public void setFileSize(int fileSize) {
        this.fileSize = fileSize;
    }
    public int getFolderSize() {
        return folderSize;
    }
    public void setFolderSize(int folderSize) {
        this.folderSize = folderSize;
    }

    
    public void print() {
        System.out.printf("文件:%s
",file.getAbsolutePath());
        System.out.printf("大小: %,d
",size);
        System.out.printf("目录: %,d
",folderSize);
        System.out.printf("文件: %,d
",fileSize);
    }
    
    
    
}
package com.data.io;

import java.io.*;
import java.awt.*;

import javax.naming.directory.DirContext;
import javax.swing.*;
/**
 * Model.java
 * @author Administrator
 *
 */
public class Model {
	/**
	 * 
	 * @param file
	 * 			目标文件
	 * @return FileInfo 文件的统计信息
	 */
	public static FileInfo getFileInfo(File file) {
		FileInfo info = new FileInfo(file);
		
		info.setSize(countSize(file));
		info.setFileSize(countFileSize(file));
		info.setFolderSize(countFolderSize(file));
		return info;
	}

	private static int countFolderSize(File dir) {
		int size = 0;	
		
		// 获得目录中的所有内容
		File[] files = dir.listFiles();
		//遍历
		for(File f : files) {
			if(f.isDirectory()) {
				//文件夹则加一
				size++;	
				//进入该目录,统计目录中文件夹的数量
				//注意不能只写countFileSize(f),这样每层都有一个新的size
				size += countFolderSize(f);
			}
		}
		return size;
	}

	private static int countFileSize(File dir) {
		int size = 0;	
		
		// 获得目录中的所有内容
		File[] files = dir.listFiles();
		
		for(File f : files) {
			if(f.isFile()) {
				//文件则加一
				size++;
	
			}else {
				//目录:进入该目录,统计目录中文件的数量
				size += countFileSize(f);
			}
		}
		
		return size;		
		
	}

	private static long countSize(File dir) {
		long size = 0;
		
		// 获得目录中的所有内容
		File[] files = dir.listFiles();
		
		for(File f : files) {
			if(f.isFile()) {
				//文件
				long s = f.length();
				size += s;
			}else {
				//目录
				size += countSize(f);
			}
		}
		
		return size;
	}
}	

 统计结果:

文件:G:jdk1.8.0_131
大小: 458,125,906
目录: 619
文件: 9,196

我的jdk版本下结果是这样,如果你的版本也是这个但是统计结果不同,请留言,探讨下谁的代码有问题

原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256577.html