首页 > 编程语言 >Java语言程序设计基础篇_编程练习题*18.28 (非递归目录大小)

Java语言程序设计基础篇_编程练习题*18.28 (非递归目录大小)

时间:2024-09-18 13:52:10浏览次数:10  
标签:练习题 18.28 遍历 Java file ArrayList File 目录 files

目录

题目:*18.28 (非递归目录大小)

习题思路

代码示例

输出结果


题目:*18.28 (非递归目录大小)

不使用递归改写程序清单18-7

  • 习题思路
  1. ( getSize方法)
    1. 创建一个变量表示总共的大小。
    2. 传入路径,创建File文件。
    3. 创建ArrayList<File>列表,并添加传入的文件。
    4. 如果列表不为空,则进入wile循环。
      1. 再新建一个ArrayList<File>存储子文件和目录
      2. 用for循环遍历每一个子文件/目录。
        1. 如果遍历元素是一个目录
          1. 遍历这个目录,如果遍历元素是文件则累加文件大小,如果是目录则添加到步骤4.1新建的目录中。
        2. 如果遍历元素是文件则累加文件大小。
      3. 将步骤4.1中的列表转移到步骤2的列表中(这个步骤要在while循环内)
  • 代码示例

编程练习题18_28NonRecursiveDirectorySize.java

package chapter_18;

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

public class 编程练习题18_28NonRecursiveDirectorySize {
	public static void main(String[] args) {
		System.out.print("Enter a directory or a file: ");
		Scanner input = new Scanner(System.in);
		String directory = input.nextLine().replaceAll("\\\\", "//");
		
		System.out.println(getSize(new File(directory)) + " bytes");
		input.close();
	}
	public static long getSize(File file) {
		long size = 0;
		ArrayList<File> files = new ArrayList<File>();
		files.add(file);
		while(!files.isEmpty()) {
			ArrayList<File> newList = new ArrayList<File>();
			for(File f : files) {
				if(f.isFile())
					size += f.length();
				else {
					File[] fileList = f.listFiles();
					if(file != null) {
						for(File f2:fileList){
							if(f2.isDirectory())
								newList.add(f2);
							else size += f2.length();
						}
					}
				}
			}
			files = newList;
		}
		return size;
	}

}
  •  输出结果
Enter a directory or a file: C:\Users\Lenovo\eclipse-workspace\JavaFX
21530663 bytes

标签:练习题,18.28,遍历,Java,file,ArrayList,File,目录,files
From: https://blog.csdn.net/2301_78998594/article/details/142331033

相关文章

  • 使用Java实现高效用户行为监控系统
    引言背景介绍:随着Web应用的日益复杂和用户体验成为产品成功的关键因素,用户行为监控(UserBehaviorMonitoring,UBM)变得越来越重要。UBM不仅帮助开发者理解用户如何与应用程序交互,还能用于性能优化、错误追踪、用户体验改进等方面。目标读者:本文面向Java开发者、系统架构师以及对用......
  • 庖丁解java(一篇文章学java)
    (大家不用收藏这篇文章,因为这篇文章会经常更新,也就是删除后重发) 一篇文章学java,这是我滴一个执念...当然,真一篇文章就写完java基础,java架构,java业务实现,java业务扩展,根本不可能.所以,这篇文章,就是一个索引,索什么呢?   请看下文.关于决定开始写博文的介绍......
  • java class
    cstdioimportjava.util.Scanner;classRead{//ilikeC++getchar()foreverQwQ!!!//idon'tknowwhyjavascannerdonothavethatQAQ!!!staticScannersc;staticStringbuff;staticintbufP;Read(){sc=new......
  • 解决ZBLOG网站运行中出现"JavaScript加载失败"问题
    当Z-Blog网站运行中出现“JavaScript加载失败”的问题时,可能的原因有几个方面,包括但不限于插件冲突、HTTPS配置问题、CDN问题等。以下是针对这些问题的一些解决方案:1.插件冲突问题描述:某些插件可能与Z-Blog核心或其他插件存在冲突,导致JavaScript无法正常加载。解决......
  • java-CC1 链条审计
    java-CC1链条审计CC1是CommonsCollections1的简称,它是ApacheCommonsCollections库中的一个已知的反序列化利用链。而这个库也是java中比较通用的库。在java语言里面有执行系统命令的Runtime类像php中的eval()、system()、exec()、shell_exec()、assert()、passt......
  • Java 8 新特性:Lambda 表达式与函数式接口全面解析(OOF(面向函数编程))
    在Java8中,引入了一系列重要的新特性,极大地提升了开发者的编程体验和代码简洁性。其中,Lambda表达式和函数式接口是最具影响力的特性,尤其在推动Java进入函数式编程领域方面具有里程碑意义。本文将全面深入地讨论Lambda表达式、函数式接口(包括Java内置函数式接口与自......
  • Java主流锁
    1.乐观锁VS悲观锁对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java中,synchronized关键字和Lock的实现类都是悲观锁。而乐观锁认为自己在使用数据时不会有别的线程修改......
  • zblog提示“JavaScript加载失败”的原因和解决办法
    当您在使用Z-Blog时遇到“JavaScript加载失败”的提示,这通常表明浏览器在加载某个或某些JavaScript文件时遇到了问题。以下是一些可能的原因及相应的解决方法:1.浏览器版本过低问题描述:使用的浏览器版本过低,不支持某些JavaScript功能。解决方法:升级到最新版本的浏览......
  • 基于java手机游戏(堡垒)的设计与开发的计算机毕设源码+论文
    手机游戏(堡垒)的设计与开发摘要随着手机业务的迅速发展,手机游戏逐渐成为移动增值服务的兴奋点。本毕业设计就着眼于J2ME技术的应用,设计与开发一款探险类手机游戏(堡垒)。该堡垒游戏是基于J2ME开发的手机RPG游戏,采用midp2.0技术实现了菜单、地图、主角动作及怪物动作和AI等,主要通过精......
  • Java结合WebSocket 实现简单实时双人协同 pk 答题
    引入实现过程WebSocket后端1、实体类2、异常处理类3、游戏状态枚举类4、ws主类5、配置类及工具类引入引入与技术选型:在实时互动应用中,实现流畅的多人协同对战功能是一大挑战。WebSocket技术,以其全双工通信能力,提供了解决方案。不同于传统HTTP请求的短连接,WebSocket建立持久连接,极......