学习Java也有近一个月了,基础语法、常用类也有所了解。上周把文件相关操作进行了一个总结,制作了一个简单的文件常用操作的工具类。
此处详解遍历文件夹、获取文件夹内所有文件
工具类包含了容下功能的实现:
1、 拷贝文件
2、 移动文件
3、 遍历文件夹
4、 获取文件夹内所有文件
5、 文件打包与解包
3、遍历文件
思路:要遍历一个文件,首先应当判断该文件是否为文件夹,如果是,则获取当前文件夹内的所有文件;然后在对每一个文件进行同样的操作;如果不是文件夹,则将该文件的路径进行输出。不难看出遍历文件需要用到递归
下面请看源代码
/**
* 遍历并输出文件绝对路径
* @param srcPath 要遍历的文件绝对路径字符串
* @return int 遍历结果 -1 表示文件不存在 ;0 表示 该对象是一个文件,不是目录,否则为当前目录下的文件数量
*/
public static int showAllFiles(String srcPath) {
File srcFile = new File(srcPath);
if (!srcFile.exists()) {
System.out.println(srcPath + "文件不存在");
return -1;
}
if (srcFile.isDirectory()) {
File[] files = srcFile.listFiles();
System.out.println(srcFile.getAbsolutePath() + ",下有" + files.length + "个文件");
//使用for - each遍历文件夹中的文件
for (File file : files) {
//如果是目录,则递归遍历文件夹
if (file.isDirectory()) {
showAllFiles(file.getAbsolutePath());
} else {
//不是目录则输出文件的局对路径
System.out.println(file.getAbsolutePath());
}
}
return files.length;
}else {
System.out.println(srcFile.getAbsolutePath());
return 0;
}
}
4、获取文件夹中的所有文件
思路:经过上面对文件夹的遍历方法的实现后,要获取文件夹中的所有文件就简单了许多。只需要在遍历文件夹的时候将每一个文件对象存入一个list集合中即可
根据以上思路,需要一个List对象才存储所有的文件对象。那么这个List对象应该怎么创建呢?因为我们这里要递归遍历文件家中的每一个文件对象,因此不能在方法内创建这个List对象;所有应该将该List对象作为参数传入。因为要频繁的添加文件对象,所有我在这选用了LinkedList集合对象。
如果想获得目录树的结构形式,请将文件存入容器的语句移动到递归调用之前
/**
* 获取文件家中的所有对象
* @param srcPath 要遍历的文件对象
* @param files 文件家中的所有对象,包含自身
*/
public static void getAllFiles(File srcPath, LinkedList<File> files) {
//判断源文件是否存在,若不存在则不用遍历
if (srcPath.exists()) {
//获取当前文件夹中的所有文件对象数组
File[] fileList = srcPath.listFiles();
//遍历当前文件夹中的所有对象
if (fileList != null && fileList.length > 0) {
for (File src : fileList) {
//递归遍历每一个子文件
getAllFiles(src, files);
}
}
//将当前文件存入集合容器中
files.add(srcPath);
}
}