这里以我的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版本下结果是这样,如果你的版本也是这个但是统计结果不同,请留言,探讨下谁的代码有问题