读取文件夹的大小
file.length()
只能读取到文件的大小,无法直接读取到文件夹的大小。所以需要递归统计读取文件夹里面所有文件或文件夹的大小。
自己实现递归读取文件夹大小
两种方式都是用递归的方法(思路都是一样):
- 使用全局变量保存大小(这种更好理解)
static long size=0;
public static void getDirectorySize(File file)
{
File[] fileArr = file.listFiles();
if (null == fileArr || fileArr.length <= 0)//部分文件夹 无权限访问,返回null
{
return;
}
for (File itemFile : fileArr)
{
if (itemFile.isFile())
{
size += itemFile.length();
}
if (itemFile.isDirectory())
{
getDirectorySize(itemFile);
}
}
}
- 使用递归逐层返回
public static long getDirectorySize2(File file)
{
long size = 0;
File[] fileArr = file.listFiles();
if (null == fileArr || fileArr.length <= 0)//部分文件夹 无权限访问,返回null
{
return size;
}
for (File itemFile : fileArr)
{
if (itemFile.isFile())
{
size += itemFile.length();
}
if (itemFile.isDirectory())
{
size += getDirectorySize2(itemFile);
}
}
return size;
}
测试:
@Test
public void test6(){
String s ="C:\\Users\\yanlei.wb\\Desktop\\图片\\缩放";
File article = new File(s);
getDirectorySize(article);
System.out.println(size);
System.out.println(getDirectorySize2(article));
}
使用common-io
- 引入依赖:
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
- 调用方法:
File file = new File("C:\\Users\\YL\\Desktop\\apache-activemq-5.16.0");
System.out.println(FileUtils.sizeOf(file));