这里以我的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\n",file.getAbsolutePath()); System.out.printf("大小: %,d\n",size); System.out.printf("目录: %,d\n",folderSize); System.out.printf("文件: %,d\n",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版本下结果是这样,如果你的版本也是这个但是统计结果不同,请留言,探讨下谁的代码有问题