[Java]用递归与非递归的形式输出给定目录的所有文件名

这一题是来自一道电面题,有时候觉得因为是女生,面试官好像都不会出太难的题~~尽管这样,刚开始我还是天真的没想到文件夹中还有文件夹的问题~真是被自己的智商打败了。

给定目录/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
			  }
		  }
	  }
  }



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值