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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值