Java - 路径+大小内的子目录和文件列表?

标签 java file size directory

例如,如果我的计算机上有一个目录 c:\test 包含以下内容 目录和文件:

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 ClassName c:\test 我想要这样的输出,按大小从大到小排序?:

目录 C:\TEST\FOO 800KB

文件 C:\TEST\SOMEFILE.DAT 700KB

目录 C:\TEST\BAR 405KB

Path startPath = Paths.get("C:\\test");
Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
    System.out.println("Dir: " + dir.toString() + " "+getFolderSize(path()));
return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
System.out.println("File: " + file.toString());    
return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult visitFileFailed(Path file, IOException e) {
return FileVisitResult.CONTINUE;
}
});

} catch (IOException e) {
e.printStackTrace();
}       

到目前为止,我得到的这一部分可以生成所有文件和目录的输出(这不是我想要的)并且没有大小?有没有人帮忙下一步该怎么做?

谢谢!

最佳答案

我想你想要这样的东西(以字节为单位输出):

import java.io.File;

public class FileSearcher {

    public static void main(String[] args) {

        File f = new File("C:\\test");
        FileSearcher.search(f);
    }

    public static void search(File f) {
        if(null == f) {
            return;
        }
        System.out.print("| " + f.getAbsolutePath());
        if(f.isFile()) {
            System.out.print(" (" +  f.length() + ")");
        } else if(f.isDirectory()) {
            File[] children = f.listFiles();
            if(null != children) {
                for(File c : children) {
                    search(c);
                }
            }
        }
        System.out.println("");
    }
}

哦,如果你碰巧关心人类友好的文件大小,像这样的东西会为你转换它们(只需将 f.length() 更改为 friendlyFileSize(f.length()):

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;
}

关于Java - 路径+大小内的子目录和文件列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20889571/

相关文章:

java - Spring Boot - 处理 NoHandlerFoundException

java - 如何查看Axis2发送和接收的内容?

java - 使用 Apache PDFBox 库对 PDF 中的数值进行右对齐

javascript - 文件 API : Blob. 切片 - 从开始处切片,还是开始后的字节?

java - Admob 没有填满所有宽度

service - 如何使用service.xml或Service Builder设置字符串列的大小?

java - 使用eclipse和maven2进行spring mvc测试

python - 如何在 Python 中将文件转换为 utf-8?

c++ - 在目录中查找最后创建的 FILE,C++

xcode - 如何在 Xcode Story Board 中添加关于多设备的动态字体大小