求一个遍历目录树的算法
想遍历一个文件夹和其内的所有的子文件夹的多叉树
//目录树的类的结构为
public class Catalog {
String CatalogName;
boolean hasFile;
Catalog[] catalogs;
}
求算法
问题点数:0、回复次数:9Top
1 楼pdw2009(不想做菜鸟)回复于 2005-04-03 23:05:03 得分 0
好贴..顶Top
2 楼simonxuluo(爱江山更爱美人)回复于 2005-04-03 23:08:59 得分 0
我只会用递归Top
3 楼simonxuluo(爱江山更爱美人)回复于 2005-04-03 23:26:45 得分 0
public class Catalog {
static int count = 0;
String catalogName;
boolean hasFile;
Catalog[] catalogs;
public Catalog(String name) {
catalogName = name;
}
public void recurse(Catalog catalog) {
if(count >= 10000 || catalog == null) return;
System.out.println("#" + (++count) + " " + catalog.catalogName);
if(catalog.catalogs != null) {
for(int i = 0; i < catalogs.length; i++) {
recurse(catalog.catalogs[i]);
}
}
}
public static void main(String[] args) {
Catalog[] c1 = new Catalog[10];
Catalog[] c2;
for(int i = 0; i < 10; i++) {
c1[i] = new Catalog("\t" + i);
c2 = new Catalog[10];
for(int j = 0; j < 10; j++) {
c2[j] = new Catalog("\t\t" + i + "-" + j);
}
c1[i].catalogs = c2;
}
Catalog c = new Catalog("¸ù");
c.catalogs = c1;
c.recurse(c);
}
}Top
4 楼slh002(呵呵)回复于 2005-04-04 00:05:25 得分 0
好Top
5 楼jnzsk()回复于 2005-04-04 07:41:19 得分 0
学习Top
6 楼javaJeff(华子)回复于 2005-04-14 15:52:41 得分 0
递归和非递归
import java.util.*;
public class Directory {
public class Catalog {
String name;
boolean hasFile;
Catalog [] catalogs;
}
public class CatalogStack {
ArrayList data = new ArrayList();
public void push(Catalog cat) {
data.add(cat);
}
public Catalog pop() {
Catalog cat;
int index = 0;
cat = (Catalog)data.get(index);
data.remove(index);
return cat;
}
public int size() {
return data.size();
}
}
Catalog root;
int printLevel = 0;
void initialize(){
if (root != null) {
return;
}
root = new Catalog();
root.name = "root";
root.hasFile = true;
root.catalogs = new Catalog[3];
for (int i = 0; i < root.catalogs.length; i ++) {
root.catalogs[i] = new Catalog();
root.catalogs[i].name = "child" + i;
root.catalogs[i].catalogs = new Catalog[2];
for (int j = 0; j < 2; j ++) {
root.catalogs[i].catalogs[j] = new Catalog();
root.catalogs[i].catalogs[j].name = "grandson" + i + "-" + j;
}
}
}
public void printAllFolders()
{
//printNode(root);
printNodeWithoutRecurve();
}
private void printNodeWithoutRecurve(){
CatalogStack stack = new CatalogStack();
if (root == null) { return ;}
stack.push(root);
//System.out.println(root.name);
while (stack.size() != 0) {
Catalog cat = stack.pop();
if (cat == null) {continue;}
System.out.println(cat.name);
for (int i = 0; (cat.catalogs != null)&&(i < cat.catalogs.length); i ++) {
if (cat.catalogs[i] == null) { continue; }
stack.push(cat.catalogs[i]);
}
}
}
private void printNode(Catalog node) {
if (node == null) {
return ;
}
for (int i = 0; i < printLevel; i ++) {
System.out.print(" ");
}
System.out.println(node.name + ((node.hasFile ? "Y" : "N")));
for (int subCatalogIndex = 0;
(node.catalogs != null) && (subCatalogIndex < node.catalogs.length) ;
subCatalogIndex ++) {
if (node.catalogs[subCatalogIndex] == null) {
continue;
}
printLevel ++;
printNode(node.catalogs[subCatalogIndex]);
}
printLevel --;
}
public static void main(String[] args){
Directory dir = new Directory();
dir.initialize();
dir.printAllFolders();
}
}
Top
7 楼shan1119(大天使,卐~解!)回复于 2005-04-14 17:08:51 得分 0
package FileIO;
import java.io.*;
class Tester{
public void seekFiles(String strName, Catalog catalog, String tab1) {
int j=0;
try{
File outFile = new File(strName);
catalog = new Catalog();
catalog.CatalogName = outFile.getName();
if (outFile.isDirectory()) {
catalog.hasFile = true;
String[] fileNames = outFile.list();
catalog.catalogs = new Catalog[fileNames.length];
for (int i = 0; i < fileNames.length; i++) {
this.seekFiles(outFile.getPath() + "\\" + fileNames[i],catalog.catalogs[i],tab1+"\t");
}
}
else if (outFile.isFile()) {
catalog.hasFile = false;
}
else {
System.out.println("File Not Found");
}
}catch(Exception e){
System.out.println(e);
}
}
public static void main(String args[])
{
Tester t=new Tester();
Catalog catalog = new Catalog();
t.seekFiles("d:\\oracle",catalog,"\t");
}
}
class Catalog {
String CatalogName;
boolean hasFile;
Catalog[] catalogs;
}Top
8 楼opencsdn(虚心求教)回复于 2005-04-14 18:12:06 得分 0
class Catalog {
String CatalogName;
boolean hasFile;
Catalog[] catalogs;
}
public class DirectorySearch
{
public static void search(Catalog catalog)
{
if(!catalog.hasFile)//this is not a directory
return ;
try
{
System.out.println(catalog.CatalogName);
for(int i=0;i<catalog.catalogs.length;i++)
{
Catalog c=catalog.catalogs[i];
if(c.hasFile)
System.out.println(c.CatalogName);
search(c);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
Catalog catalog=new Catalog();
//自己初始化这个catalog
search(catalog);
}
}Top
9 楼thrive_li()回复于 2005-04-14 18:53:11 得分 0
upTop




