File中经常会使用递归方法打印属性结构、统计文件夹下文件个数、子文件夹个数以及文件大小,可以作为递归的应用练习。

递归的写法,百度一搜一大堆,这里我使用对javabean方式封装了一下:

package com.xzlf.io;

import java.io.File;

public class TestCount {
private String dir;//文件夹 private int length;//文件夹大小 private int size;//文件个数 private int dirsize = -1;//文件夹个数,只统计子文件夹个数 public TestCount(String dir) {
super();
this.dir = dir;
} public int getLength() {
return length;
} public int getSize() {
return size;
} public int getDirsize() {
return dirsize;
} /**
* 递归遍历文件夹
* @param dir
* @param deep
*/
public void printDir(File dir,int deep) {
for (int i = 0; i < deep; i++) {
System.out.print("-");
}
System.out.println(dir.getName());
if(null == dir || !dir.exists()) {
return;
}else if(dir.isDirectory()) {
dirsize++;
File[] listFiles = dir.listFiles();
for(File f : listFiles) {
printDir(f, deep + 1);
}
}
} /**
* 统计文件夹大小、子文件夹和文件个数
* @param dir
*/
public void countDir(File dir) {
if(dir != null && dir.exists()) {
if(dir.isFile()) {
size++;
length += dir.length();
}else {
File[] listFiles = dir.listFiles();
for (File f : listFiles) {
countDir(f);
}
}
} } public static void main(String[] args) {
TestCount tc = new TestCount("D:\\workspace_eclipse_2019_12\\fuxi\\reDo");
File f = new File(tc.dir);
tc.printDir(f, 0);
tc.countDir(f);
System.out.printf("文件个数:%d%n文件夹大小:%d%n文件大小:%d%n",
tc.getSize(),tc.getDirsize(),tc.getLength());
}
}

运行测试:

Java IO基础--File常用操作(递归)的更多相关文章

  1. Java IO编程——File文件操作类

    在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一 一个与文件本身操作(创建.删除.重命名等 ...

  2. Java—IO流 File类的常用API

    File类 1.只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问. package cn.test; import java.io.File; import java.io.IOE ...

  3. java IO基础操作

    java IO基础,通熟易懂,好久没复习java 基础了.这里是传送门... http://www.cnblogs.com/nerxious/archive/2012/12/15/2818848.ht ...

  4. 总结java创建文件夹的4种方法及其优缺点-JAVA IO基础总结第三篇

    本文是Java IO总结系列篇的第3篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  5. 总结删除文件或文件夹的7种方法-JAVA IO基础总结第4篇

    本文是Java IO总结系列篇的第4篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  6. 总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇

    本文是Java IO总结系列篇的第5篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  7. Java SE 基础:常用关键字

    Java SE 基础:常用关键字 常用关键字表

  8. [Storm] java.io.FileNotFoundException: File '../stormconf.ser' does not exist

    This bug will kill supervisors Affects Version/s: 0.9.2-incubating, 0.9.3, 0.9.4 Fix Version/s: 0.10 ...

  9. 运行基准测试hadoop集群中的问题:org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /benchmarks/TestDFSIO/io_data/test_

    在master(即:host2)中执行 hadoop jar hadoop-test-1.1.2.jar DFSCIOTest -write -nrFiles 12 -fileSize 10240 - ...

随机推荐

  1. 并发——抽象队列同步器AQS的实现原理

    一.前言   这段时间在研究Java并发相关的内容,一段时间下来算是小有收获了.ReentrantLock是Java并发中的重要部分,所以也是我的首要研究对象,在学习它的过程中,我发现它是基于抽象队列 ...

  2. Unity 游戏框架搭建 2019 (二十五) 类的第一个作用 与 Obselete 属性

    在上一篇我们整理到了第七个示例,我们今天再接着往下整理.我们来看第八个示例: #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; ...

  3. Mybatis中的# 与 $

    我们说MyBatis有两种注入参数的方式, - 一种是#{} - 另一种是${} 这两种从使用功能来看差距不大,那为什么会强推使用#? ${}使用的是拼接字符串,#{}使用的是占位符的方法,经过了处理 ...

  4. Python:Day05-2

    面向对象进阶 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息.为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程 ...

  5. scratch 如何改变变量的作用域

    在新建变量的时候,有个选项是“适用于所有角色”还是“仅适用于当前角色”.通常称前者为全局变量,所有角色都可以访问到这个变量:后者,称为局部变量,只能在当前角色里访问到这个变量.例如,在使用克隆功能时, ...

  6. python 面向对象反射以及内置方法

    一.反射 什么是反射:可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),python中一切皆对象,都可以使用放射. 反射的四种方法: hasattr:hasattr(objec ...

  7. 正则表达式 regex

    正则表达式存在于String api下的matches方法 常用正常表达式: 字符 x 字符 x \\ 反斜线字符 字符类 [abc] a.b 或 c(简单类) [^abc] 任何字符,除了 a.b ...

  8. rdd简单操作

    1.原始数据 Key value Transformations(example: ((1, 2), (3, 4), (3, 6)))  2. flatMap测试示例 object FlatMapTr ...

  9. JavaScript实现简单的弹幕效果实例分析

    不知大家有没有感受到,弹幕又是另一出好戏!! 不过我个人还是比较排斥看电视的时候被出来的弹幕打扰.今天我们来写一个简单的弹幕.简单到什么程度呢?看下效果: 由图可以看出,我们的呆毛html结构确实是非 ...

  10. D3平移和缩放后的点击坐标(D3 click coordinates after pan and zoom)

    我使用D3库来创建绘图应用程序. 我需要在用户单击的坐标上绘制对象(为了简单起见).问题是当用户使用平移&缩放和移动视口.然后对象是错误的位置的地方(我想问题是事件坐标是相对于svg元素而不是 ...