标签:
/*******************************************************递归实现***************************************************/
/**
* 获取某文件夹的所有文件
* @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