Java中递归的优缺点,Java写一个递归遍历目录下面的所有文件包括子文件夹里边的文件。
题目: 遍历出aaa文件夹下的文件
首先分析思路:
1、首先判断这个文件夹是否为文件,通过isFile()函数可以判断是否为文件。
2、然后通过isDirectory判断是否为目录。
3、如果是目录就使用递归遍历目录
代码如下:
import java.io.File;
public class ZuoYe {
public static void main(String[] args) {
//创建file对象
File f=new File("d://新建文件夹");
//用listFiles()方法遍历文件夹
File[] listFiles = f.listFiles();
fun(listFiles);
}
public static void fun(File[] file){
//如果文件夹为空就直接退出
if(file==null){
return;
}
//遍历file
for(File f1:file){
//判断如果文件不是文件夹就直接输出文件名
if(f1.isFile()){
System.out.println(f1.getName());
}
//如果文件是个文件夹就继续通过调用自己遍历文件夹
else if(f1.isDirectory()){
fun(f1.listFiles());
}
}
}
}
总结:递归思想也就是自己调用自己,其实还是重复使用,相当于先遍历外层的文件夹,然后文件夹里边还存在文件夹,所有就调用自己的方法再次遍历内部的文件夹而已。
递归的优点:最大的就是简单
递归的缺点:
1、递归由于是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址以及临时变量,而往栈中压入数据和弹出数据都需要时间。->效率低
2、因为是调用自己,所以很多的计算都是重复的。--->效率
3、调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的栈的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致栈溢出。->性能
Java中递归的优缺点,Java写一个递归遍历目录下面的所有文件包括子文件夹里边的文件。的更多相关文章
- php遍历一个文件下的所有文件和子文件夹下的文件
function AllFile($dir){ if($dh = opendir($dir)){ while (($file = readdir($dh)) !== false){ if($file ...
- C# 递归查找文件夹下所有文件和子文件夹的所有文件
方法实现 public class DirectoryAllFiles { static List<FileInformation> FileList = new List<File ...
- java 打印流 递归复制子文件子文件夹 不同编码文件复制到同一文件中 序列化流反序列化流
package com.swift.jinjie; import java.io.BufferedInputStream; import java.io.File; import java.io.Fi ...
- Java 遍历指定文件夹及子文件夹下的文件
Java 遍历指定文件夹及子文件夹下的文件 /** * 遍历指定文件夹及子文件夹下的文件 * * @author testcs_dn * @date 2014年12月12日下午2:33:49 * @p ...
- Android程序函数 将assets文件夹下的文件复制到手机的sd卡中(包括子文件夹)
最近在做个功能是将asset文件夹下的所有文件(包括子文件)全部拷贝出来到指定目录下.所用的方法无非是用AssetManager.但是这里 有个问题是也要讲子文件夹和子文件都要拷贝出来.到网上Goog ...
- Java中新建子文件夹和新建文件
File file = new File("地址"); file.mkdirs(); //新建文件夹,当没有父文件夹时,但是不会自动创建父文件夹 file.mkdirs(); // ...
- C#获取文件夹内文件包括子文件(递归)实例
这个在我工作上,写了一次工具项目,用上的. static ArrayList FileList = new ArrayList();//这个必须写在方法外, static ArrayList GetA ...
- python 小练习之删除文件夹下的所有文件,包括子文件夹中的文件
先屡一下思路 一步步怎么实现 1 要求是要删除所有文件(只是删除文件 而不是文件夹),所以 我们肯定要遍历这个文件目录 (for in遍历) 2 每遍历一个元素时(文件),我们要判断该元素的属性是 ...
- c++ 输出文件夹(不包括子文件夹)中后缀文件
参考:_finddata_t结构体用法 - 麒麒川的博客 - CSDN博客 准备知识部分: MessageBox MessageBox function (winuser.h) | Microsoft ...
随机推荐
- StanFord ML 笔记 第八部分
第八部分内容: 1.正则化Regularization 2.在线学习(Online Learning) 3.ML 经验 1.正则化Regularization 1.1通俗解释 引用知乎作者:刑无刀 ...
- redis下操作Set和Zset
redis操作set 无序集合 元素为string类型 元素具有唯一性,不重复 命令 设置 添加元素 SADD key member [member ...] 获取 返回key集合所有的元素 SME ...
- error C2011: “timespec”:“struct”类型重定义
error C2011: “timespec”:“struct”类型重定义 C++ pthread pthread.h 中的 timespec 和time.h 中的 结构定义重复了 ,同时两个头文件中 ...
- 《算法》BEYOND 部分程序 part 2
▶ 书中第六章部分程序,加上自己补充的代码,包括快速傅里叶变换,多项式表示 ● 快速傅里叶变换,需要递归 package package01; import edu.princeton.cs.algs ...
- TP的di
依赖注入的意思是通过反射分析类所依赖的其他类,从容器中获取相应的对象并自动注入到类里面 首先依赖注入和控制反转说的是同一个东西,是一种设计模式,这种设计模式用来减少程序间的耦合,鄙人学习了一下,看TP ...
- NRF51822之使用外部32Mhz晶振
硬件平台为微雪BLE400的(将原来的16mhz晶振改为32mhz.两个旁电容改为22pf) 以nRF51_SDK_10.0.0_dc26b5e\examples\ble_peripheral\ble ...
- Django 之多表查询 与多表的使用
1.django的多表查询 主要区分为: 正向查询 逆向查询 1. 多表查询: 是一个复杂的查询,他分为对象查询和__模糊查询两种方式 2. 多表查询: 又分为 一对一查询, 一对多查询, 多对 ...
- hadoop配置2.6.1 centos7
上传文件(分发)的三种方式: 1.本地: -file 的模式,上传一些小的文件. 例如: -file ./test INPUT_FILE_PATH_1="/The_Man_of_Proper ...
- jquery接触初级-----ajax 之:load()方法
jquery _ajax 请求主要有几种方式:load(),$.get(),$.post(),$.ajax(),$.getScript(),$.getJson() 1.load()方法 格式:load ...
- javascript中函数作用域和声明提前
javascript不像java等其他强类型语句,没有块级作用域(括号内的代码都有自己的作用域,变量在声明它们的代码段之外不可见)一说,但有自己的独特地方,即函数作用域. 函数作用域:变量在声明它们的 ...