这一题是来自一道电面题,有时候觉得因为是女生,面试官好像都不会出太难的题~~尽管这样,刚开始我还是天真的没想到文件夹中还有文件夹的问题~真是被自己的智商打败了。
给定目录/data/data/*
我们先说下递归吧。这个是很容易想到的解决方案。
void getFilesFromDirectory(String path)
{
File file=new File(path);
File[] files=file.listFiles();
for(File f:files)
{
if(f.isDirectory())
{
getFilesFromDirectory(path+f.separator+f.getName());//当它是目录时,就再次递归调用该方法
}else
{
System.out.println(f.getName());
}
}
}
非递归调用,这个其实也不难。但是可能紧张的呢。还让面试官提醒了一下,类似于树状的文件遍历。于是想到用stack来保存每个文件目录,然后再来遍历。其实都无所谓了。就是用一个辅助空间,保存文件目录路径,然后单独的对目录路径进行遍历和处理。
void getFilesFromDirectory1(String path)
{
File file=new File(path);
File[] files=file.listFiles();
Stack<String> stack=new Stack<String>();
for(File f:files)
{
if(f.isFile())
{
System.out.println(f.getName());
}else
{
stack.add(f.getAbsolutePath());//用stack保存路径
}
}
while(!stack.isEmpty())//stack中有目录
{
String tmp=stack.pop();
file=new File(tmp);
files=file.listFiles();
for(File f:files)
{
if(f.isFile())
{
System.out.println(f.getName());
}else
{
stack.push(f.getAbsolutePath());//文件夹下还有文件夹入stack
}
}
}
}