黑马程序员技术交流社区
标题:
为什么没有递归?烦到想撞墙
[打印本页]
作者:
JarryHorse
时间:
2015-4-29 16:46
标题:
为什么没有递归?烦到想撞墙
本帖最后由 JarryHorse 于 2015-4-29 16:54 编辑
/*
需求:用File类创建一个包含某文件夹中文件目录的文本文件的代码示例
*/
import java.io.*; //导入IO中的类
import java.util.*; //导入集合所在包中的类
//定义类
class FileDemo
{
//主函数
public static void main(String[] args)
{
//创建一个File对象,传入一个路径的字符串表示
File fi = new File("d:\\codefile\\Javas");
//创建一个List集合,用于存放文件名
List<String> list = new ArrayList<String>();
//判断一下File表示的路径是否存在,是否是目录
if (fi.exists())
{
if (fi.isDirectory())
{
//调用自定义遍历文件夹的方法,将文件夹中的文件名和绝对路径字符串存入list集合中
dirList(list,fi);
}
}
//创建一个字符流引用
BufferedWriter bufw = null;
try
{
//创建一个带缓冲的文件字符写入流,传入要写入数据的文件名
bufw = new BufferedWriter(new FileWriter("dirList.txt"));
//遍历list集合,将集合中的文件名字符串写入流中,并刷新到目的地
for (String str:list)
{
bufw.write(str);
bufw.newLine(); //每条换行一次
bufw.flush(); //刷新
}
}
//处理IO异常
catch (IOException e)
{
e.printStackTrace();
}
//最后要关流
finally
{
//在里面单独try关流时抛出的异常
try
{
//如果流存在才关
if (bufw != null)
{
bufw.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
//定义一个遍历目录中文件的方法
public static void dirList(List<String> list,File fi)
{
String[] ff = fi.list();
if(ff!= null)
{
//取出文件夹中的目录和文件的数组,并遍历
for(String str:fi.list())
{
//加入绝对路径
File file = new File(str).getAbsoluteFile();
if (file.isDirectory())
{
list.add(file.toString());
dirList(list,file);
}
else
{
list.add(file.toString());
}
}
}
}
}
复制代码
文件夹里面是有大量文件和文件夹的,只读出了第一层目录的文件和文件夹,但是没有递归到文件夹里面读文件,用Eclipse debug时读到递归时直接顺序读下去了,没有跳转递归,找不到哪里出问题了,烦啊!!!!!!
作者:
JarryHorse
时间:
2015-4-29 18:46
本帖最后由 JarryHorse 于 2015-4-29 18:47 编辑
终于弄明白了,用表示相对路径的字符串new出来的文件对象无法获取它的绝对路径,所以不能用getAbsoluFile方法,只能用原来的路径续上去再new一个文件对象,或者直接用listFiles方法获取一个文件对象数组来遍历递归。至于为什么能获取到第一层文件夹的文件和目录名的问题,应该是因为我这个文件本身就在要获取的路径中,所以在用字符串new出来的文件对象就直接默认自己的根目录是当前目录了,所以才能将当前目录的那层文件和文件夹提取出来,哎!被搞死了,下次小心
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2