import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
//实现文件夹下面的所有目录或者文件,若是该目录下还是目录则也需要遍历
public class dir_ergodic {
public static void main(String [] args)
{
//首先获取目标目录下的所有文件以及目录
File dir = new File("E:\\download\\datasets\\image");
File [] names = dir.listFiles();
//创建一个容器用于保存当前目录下的所有目录及文件
ArrayList<File> list = new ArrayList<File>();
//将第一级的目录保存到容器中
assert names != null;
//System.out.print(names[0]);
boolean b = list.addAll(Arrays.asList(names));
for(int i =0;i<list.size();i++)
{
//判断是否为目录先遍历某一个子目录下面的目录,然后遍历另一个子目录下面的目录
//如果是目录则先保存起来,然后再遍历
//System.out.println(list.get(i));
if(list.get(i).isDirectory())
{
File [] name = list.get(i).listFiles();
assert name != null;
list.addAll(Arrays.asList(name));
}
}
System.out.println(list);
}
}
说一下不常用的assert关键字:
assert意为断言的意思,这个关键字可以判断布尔值的结果是否和预期的一样,如果一样就正常执行,否则会抛出AssertionError
方式二:使用队列的方式遍历(只遍历)目录
class File_Queue{
public void show()
{
File dir = new File("E:\\download\\datasets\\image");
Queue<File> que = new Queue<File>();
File[] names = dir.listFiles();
assert names != null;
for(File name:names)
{
if(name.isDirectory())
{que.Queue_add(name);}
}
System.out.println(dir);
while (!que.Queue_is_empty())
{
File dir_file = que.Queue_get();
File [] dir_names = dir_file.listFiles();
System.out.println(dir_file);
assert dir_names !=null;
for(File name : dir_names)
{
if(name.isDirectory())
{
que.Queue_add(name);
}
}
}
}
}
class Queue<E>{
private LinkedList<E> link;
Queue()
{
link = new LinkedList<E>();
}
//实现队列的先进先出
public void Queue_add(E o)
{
link.addFirst(o);//这里使用的是addFirst那么下面出队就是removeLast,因为进队的总是从头部添加
}
public E Queue_get()
{
return link.removeLast();
}
public boolean Queue_is_empty()
{
return link.isEmpty();
}
}```