码迷,mamicode.com
首页 > 其他好文 > 详细

递归和非递归方法得到某文件夹中的全部文件和文件夹

时间:2015-12-28 20:23:16      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

/*******************************************************递归实现***************************************************/

/**
* 获取某文件夹的所有文件
* @param filePath 获取文件的文件夹路径
* @param myFiles 保存文件的文件集合
* @return  所有的文件及文件夹
* @throws IOException
*/
public static ArrayList<File> getAllFiles(String filePath,
ArrayList<File> myFiles) throws IOException {// 由于要递归调用函数本身,用形参做该函数的返回值
File file = new File(filePath);
if (file.exists()) {// 判断文件夹是否存在
for (File fi : file.listFiles()) {// 遍历文件夹
if (fi.isDirectory()) {
myFiles.add(fi);// 如果是文件夹则添加到集合中
getAllFiles(fi.getCanonicalPath(), myFiles);// 如果是目录则递归调用
} else {
myFiles.add(fi);// 如果是文件则添加到集合中
}
}
}
return myFiles;// 返回 所有的文件及文件夹
}

/*********************************************************非递归实现************************************************/

 

/**
* 获取某目录下全部文件(非递归实现)
* @param path 目录路径
* @return 所有的文件及文件夹
*/
public static ArrayList<File> getAllFilesAndDirs(String path) {
File file = new File(path), tempFile = null;// 根据path路径new一个文件,定义一个临时文件变量并初始化为空
int index = 0;// 定义集合的索引,并初始化为0
ArrayList<File> dirList = new ArrayList<File>();// 定义保存文件夹的集合
ArrayList<File> fileList = new ArrayList<File>();// 定义保存文件的集合
if (file.exists() && file.isDirectory()) {// 判断file是否是文件夹
dirList.add(file);// 将file添加到文件夹集合中
tempFile = dirList.get(0);// 初始化临时文件变量
} else {
fileList.add(file);// 若file为文件则添加到文件集合中
}
while (tempFile != null) {// while循环,若临时文件变量为空时,则退出循环
index++;// 索引自增
for (File fi : tempFile.listFiles()) {// 遍历tempFile临时文件变量
if (fi.isDirectory()) {
dirList.add(fi);// tempFile临时文件变量中存在文件夹则添加到文件夹集合中
} else {
fileList.add(fi);// tempFile临时文件变量中存在文件则添加到文件集合中
}
}
if (index < dirList.size()) {// 为避免数组越界,只有索引小于集合长度时,tempFile才重新赋值为文件夹集合的文件夹对象
tempFile = dirList.get(index);// tempFile重新赋值为文件夹集合的第index个文件夹对象
} else {
tempFile = null;// 当索引变量大于文件夹集合长度时,tempFile赋值为空,此时循环将结束
}
}
for (File fi : dirList) {// 遍历文件夹集合
fileList.add(fi);// 将文件夹集合中的文件夹对象添加到文件集合中
}
return fileList;// 此时文件集合fileList得到了所有的文件夹及文件,返回该集合
}

递归和非递归方法得到某文件夹中的全部文件和文件夹

标签:

原文地址:http://www.cnblogs.com/likeADream/p/5083385.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!