【发布时间】:2014-01-22 21:50:56
【问题描述】:
有这种子目录:
C:\test\foo\a.dat (100kb)
C:\test\foo\b.dat (200kb)
C:\test\foo\another_dir\jim.dat (500kb)
C:\test\bar\ball.jpg (5kb)
C:\test\bar\sam\sam1.jpg (100kb)
C:\test\bar\sam\sam2.jpg (300kb)
C:\test\somefile.dat (700kb)
我想获取所有子目录的大小,但只显示顶级目录,运行命令 java DU c:\test 应该会产生以下输出:
DIR C:\TEST\FOO 800KB
FILE C:\TEST\SOMEFILE.DAT 700KB
DIR C:\TEST\BAR 405KB
任何帮助都会很好,到目前为止我的代码很接近但没有得到预期的输出? :/
import java.io.File;
public class DU {
public static void main(String[] args) {
File file = new File(args[0]);
if (file.isDirectory()) {
File[] filesNames = file.listFiles();
for (File temp : filesNames) {
if (temp.isDirectory()) {
File dirs = new File(temp.getPath());
getDirSize(dirs);
} else {
System.out.println("FILE - " + temp.getPath() + " "
+ friendlyFileSize(temp.length()));
}
}
} else {
System.out.println("THIS IS NOT A FILE LOCATION!");
}
}
private static long getDirSize(File dirs) {
long size = 0;
for (File file : dirs.listFiles()) {
if (file.isFile())
size += file.length();
else
size += getDirSize(file);
}
System.out.println("DIR - " + dirs+" "+ friendlyFileSize(size));
return size;
}
public static String friendlyFileSize(long size) {
String unit = "bytes";
if (size > 1024) {
size = size / 1024;
unit = "kb";
}
if (size > 1024) {
size = size / 1024;
unit = "mb";
}
if (size > 1024) {
size = size / 1024;
unit = "gb";
}
return " (" + size + ")" + unit;
}
}
此代码获取所有子目录的输出,而不是显示所有子目录的总和并仅打印顶级目录 ???非常感谢任何帮助:D
FILE - c:\test\baba.pdf (4)mb
FILE - c:\test\babdb.txt (67)kb
DIR - c:\test\one\oneone (67)kb
DIR - c:\test\one (814)kb
DIR - c:\test\two\twotwo (322)kb
DIR - c:\test\two (368)kb
【问题讨论】:
-
只需将你的 sop 从 getDirSize 移到 main 方法
标签: java size directory subdirectory