递归的问题求教,谢谢

WMM635241 2012-08-04 05:15:57
import java.io.File;
import java.util.ArrayList;

public class ListAllTest
{
//用于判断目录或文件所处的层次
private static int time;

// 递归的方法
public static void deepList(File file)
{
if (file.isFile() || 0 == file.listFiles().length)
{
return;
}
else
{
File[] files = file.listFiles();

files = sort(files);

for(File f : files)
{
StringBuffer output = new StringBuffer();

if(f.isFile())
{
output.append(getTabs(time));
output.append(f.getName());
}
else
{
output.append(getTabs(time));
output.append(f.getName());
output.append("\\");
}

System.out.println(output);

if(f.isDirectory())
{
time++;

deepList(f);

time--;
}
}
}
}

// 整理文件数组,使得目录排在文件之前
private static File[] sort(File[] files)
{
ArrayList<File> sorted = new ArrayList<File>();

// 寻找到所有的目录
for (File f : files)
{
if (f.isDirectory())
{
sorted.add(f);
}
}
// 寻找到所有的文件
for (File f : files)
{
if (f.isFile())
{
sorted.add(f);
}
}

return sorted.toArray(new File[files.length]);
}

//判断需要加多少 tab的方法
private static String getTabs(int time)
{
StringBuffer buffer = new StringBuffer();

for(int i = 0; i < time; i++)
{
buffer.append("\t");//在同一个缓冲区内横向跳8个空格
}

return buffer.toString();
}


public static void main(String[] args)
{
File file = new File("C:\\Projects\\wsclient");

deepList(file);
}

}






搞不懂这行代码中为何要添加一个time--;

if(f.isDirectory())
{
time++;

deepList(f);

time--;
}


...全文
101 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
噢噢噢噢 2012-08-04
  • 打赏
  • 举报
回复
没必要这么复杂..

import java.io.File;

public class FileTree
{
int layer = -1;

public void print(File file){
System.out.print(file.getName());

if (file.isDirectory())
{
layer++;
System.out.print('\\');
System.out.print('\n');
File [] list = file.listFiles();

for (File f : list)
{
for(int i = 0;i<=layer;i++){
System.out.print('\t');
}
print(f);
}
layer--;
}else{
System.out.print('\n');
}

}


public static void main(String[] args)
{
FileTree ft = new FileTree();

ft.print(new File("C:\\Ant\\docs"));
}

}


Sad4This 2012-08-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

搞不懂这行代码中为何要添加一个time--;

if(f.isDirectory())
{
time++;

deepList(f);

time--;
}
[/Quote]
这个time--,相当于进入一个文件夹里time++,从里面返回出来就time--,就回到原来那个层次
然后可以再进其他的文件夹
WMM635241 2012-08-04
  • 打赏
  • 举报
回复
搞不懂这行代码中为何要添加一个time--;

if(f.isDirectory())
{
time++;

deepList(f);

time--;
}

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧