Java、获取目录大小

该博客展示了如何使用Java编程实现两种方法来计算文件或目录的大小:递归方式和非递归方式。递归方法通过遍历文件和子目录并累加其长度实现,而非递归方法则利用链表来处理目录结构,同样达到计算总大小的目的。这两个实用程序可以帮助理解和比较不同的文件系统遍历策略。
摘要由CSDN通过智能技术生成

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

递归方式:

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、付费专栏及课程。

余额充值