Java、获取目录大小

本程序用于获取文件或目录的大小。

递归方式:

package Recursive;

import java.io.File;
import java.util.Scanner;

public class DirectorySize {
    public static void main(String[] args) {
        System.out.print("Enter a directory or a file: ");
        File file = new File(new Scanner(System.in).nextLine());

        System.out.println(getSize(file) + " bytes");
    }

    /** 返回文件大小 */
    public static long getSize(File file) {
        long size = 0;  //文件大小

        if (file.isFile())  //如果是文件,size加上文件长度
            size += file.length();
        else {  //否则
            File[] files = file.listFiles();    //目录获取文件数组
            for (int i = 0; files != null && i < files.length; i++)
                size += getSize(files[i]);  //递归调用本方法
    }
        return size;
    }
}

非递归方式:

package Recursive;

import java.io.File;
import java.util.LinkedList;
import java.util.Scanner;

public class Exercise18_28 {
    public static void main(String[] args) {
        System.out.print("Enter a directory or a file: ");
        File file = new File(new Scanner(System.in).nextLine());

        System.out.println(getSize(file) + " bytes");
    }

    /** 返回文件大小 */
    public static long getSize(File file) {
        long size = 0;  //文件大小
        LinkedList<File> linkedList = new LinkedList<>();   //链表

        if (file.isFile())  //如果是文件
            size += file.length();
        else {  //如果是目录
            linkedList.addFirst(file);  //添加目录到链表
            while (linkedList.size() > 0) {
                for (File file1 : linkedList.removeFirst().listFiles()) //遍历移除的目录
                    if (file1.isDirectory())    //如果是目录,加入链表
                        linkedList.addFirst(file1);
                    else
                        size += file1.length(); //否则,加上文件长度
            }
        }
        return size;
    }
}

 


版权声明:本文为m0_62659797原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。