您现在的位置是:主页 > news > 海南城乡建设网站/最新新闻热点事件2024
海南城乡建设网站/最新新闻热点事件2024
admin2025/5/14 6:06:46【news】
简介海南城乡建设网站,最新新闻热点事件2024,建设项目自主验收公示网站,使用vue做的网站有哪些今天,在论坛上看到有人求推荐一个可以方便计算文件夹大小的软件。原因也很简单,毕竟每次都使用鼠标右键查看属性不够方便。其实,对于这样的软件是否存在,以及存在的是否好用,我并没有关心。我忽然想到,这个…
今天,在论坛上看到有人求推荐一个可以方便计算文件夹大小的软件。原因也很简单,毕竟每次都使用鼠标右键查看属性不够方便。其实,对于这样的软件是否存在,以及存在的是否好用,我并没有关心。我忽然想到,这个功能似乎比较容易实现,于是就简单尝试了一下,给出了一个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
然后,我们打开文件管理器,右键看一下该目录的属性:
我们下面再使用ls命令查看一下:
很容易看出,各个文件的大小之和刚好等于上面程序的输出结果,并且也和右键属性中看到的基本一致。
接下来,使用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:)