java 大量小文件夹,一个计算文件夹大小的Java小程序

今天,在论坛上看到有人求推荐一个可以方便计算文件夹大小的软件。原因也很简单,毕竟每次都使用鼠标右键查看属性不够方便。其实,对于这样的软件是否存在,以及存在的是否好用,我并没有关心。我忽然想到,这个功能似乎比较容易实现,于是就简单尝试了一下,给出了一个Java小程序,解决这个有趣的问题。

下面是源代码:

/**

* @file DirectorySize.java

* A simple program to calculate the size of a directory.

* @author Jason http://www.zhangliancheng.com

* @date Tue Mar 8 13:59:21 CST 2011

*/

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

public class DirectorySize

{

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

{

File dir = new File(".");

long size = getSize(dir);

System.out.println(size + " bytes");

}

/**

* @para directory the size of which to calculate

* @return long the size of the diretory in bytes

*/

public static long getSize(File directory) throws IOException

{

File[] files = directory.listFiles();

long size = 0;

for (File f : files)

{

if (f.isDirectory())

size += getSize(f);

else

{

FileInputStream fis = new FileInputStream(f);

size += fis.available();

fis.close();

}

}

return size;

}

}

最初写的时候,上面的34到38行只有简简单单的一行:

size += new FileInputStream.available();

这样初看起来似乎没有什么问题,但是在当前目录有很多文件和目录的时候,运行就会弹出

异常,并提示open too many files,原来是忘记关闭而超过所能打开的最大数目的限制了>

修改成现在的样子就好了,来来来,看一下运行效果吧:

$ javac DirectorySize.java

$ java DirectorySize

736286003 bytes

呵呵,比较懒啊,没进行单位换算,单位还是比较小的字节。

这个程序不仅有这个基本功能,还带来一点不错的“副作用”,下面我们来验证其运行结果。

首先,我们新建一个测试目录,加入一些文件使之有一定大小,然后用这个程序看看目录目前总容量:

$ java DirectorySize

2107 bytes

然后,我们打开文件管理器,右键看一下该目录的属性:

0818b9ca8b590ca3270a3433284dd417.png

我们下面再使用ls命令查看一下:

0818b9ca8b590ca3270a3433284dd417.png

很容易看出,各个文件的大小之和刚好等于上面程序的输出结果,并且也和右键属性中看到的基本一致。

接下来,使用Linux专门查看文件占用空间大小的du命令来查看一下:

$ du --version

du (GNU coreutils) 7.4

Copyright (C) 2009 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later .This is free software: you are free to change and redistribute it.

Torbjörn Granlund, David MacKenzie, Paul Eggert,

andThere is NO WARRANTY, to the extent permitted by law.

Written by

Jim Meyering.

$ du -sb

6203.

怎么会是六千多,为什么相差这么多呢?这让我非常的不解,又仔细看了下du的手册页,也没有发现任何问题。难道du命令存在BUG?

经过简单的搜索,我在这个链接里看到,已经有人提交了这个BUG。原来如此,看来需要更新一下手头的coreutils了。 OK,这就是我说的该程序的附加作用,意外地发现了du命令存在的BUG:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值