我现在正在做一个压缩目录的方法,首先用递归法来历遍各级子目录中的文件,例如public static void listSubDir(File f)
{
File fList[]=f.listFiles();
if(fList!=null)
{
for(int i=0;i<fList.length;i++)
{
if(fList[i].isDirectory())
{
listSubDir(fList[i]);
}
else
{
System.out.println("file:"+fList[i].getAbsolutePath()+"");
}
}
}
else
{ }
}
但我想知道,什么时候到了最后一次的历遍呢?因为是这样的,我要知道最后一步,然后把输出流都关闭掉,算法想不明白,请各位帮帮忙。
{
File fList[]=f.listFiles();
if(fList!=null)
{
for(int i=0;i<fList.length;i++)
{
if(fList[i].isDirectory())
{
listSubDir(fList[i]);
}
else
{
System.out.println("file:"+fList[i].getAbsolutePath()+"");
}
}
}
else
{ }
}
但我想知道,什么时候到了最后一次的历遍呢?因为是这样的,我要知道最后一步,然后把输出流都关闭掉,算法想不明白,请各位帮帮忙。
只是关闭输出流不能放在for循环后面,因为有字目录的时候也会执行那个循环,如果关闭那下面就进行不下去了
关闭输出流的位置还是放在这个函数执行后面吧
遍历过的节点置flag=1;
然后用if语句判断是否所有的节点flag都为1,是则结束,否则继续遍历。
fun(){
if(condition)
{
return;}
}
fun(){
if(condition)
{
dosomething;
return;
}else
{
fun()
}
}
{
File fList[]=f.listFiles();
if(fList!=null)
{
for(int i=0;i<fList.length;i++)
{
if(fList[i].isDirectory())
{
listSubDir(fList[i],false);
}
else
{
System.out.println("file:"+fList[i].getAbsolutePath()+"");
}
}
}
else
{ }
if(flag){
//关闭out
}
}在调用这个函数的时候flag是true,而子节点递归调用的时候flag传false
这样似乎可以满足楼住的需要,但是我感觉有点别扭
不知道有没有更好的办法
而代码是写在for循环的后面的,你所有的递归都发生在for循环里面,第一次调用函数的那个for循环结束后,那么所有的递归过程都已经结束了
楼主你再好好想想吧
FileInputStream fis = new FileInputStream("yourPath");
try {
....//文件操作
} finally {
fis.close();
}
}
else
{
System.out.println("file:"+fList[i].getAbsolutePath()+"");
//关闭
}
根目录 不就是加个finally{}?