一个简单的递归程序,它读取给定目录下所有文件,然后以树型的方式在屏幕上打印出来.昨天断断续续得花了1个多小时写出来
读取文件
package
test;
import
java.io.
*
;
import
java.util.
*
;

/** */
/**
* Put files into a tree
*
*/

public
class
ReadFilesAndBuiltTree
{

static
class
Node
{
private
Node father;
private
List children;
private
File data;
public
Node()
{
children
=
new
Vector();
}

public
File getData()
{
return
data;
}

public
void
addChild(Node c)
{
this
.getChildren().add(c);
}

public
void
setData(File data)
{
this
.data
=
data;
}

public
List getChildren()
{
return
children;
}

public
void
setChildren(List children)
{
this
.children
=
children;
}

public
Node getFather()
{
return
father;
}

public
void
setFather(Node father)
{
this
.father
=
father;
}

public
boolean
hasChildren()
{
return
children.size()
>
0
;
}

public
Node getChile(
int
index)
{
return
(Node)children.get(index);
}

public
Node getChild(String fname)
{
Iterator i
=
getChildren().iterator();
while
(i.hasNext())
{
Node bn
=
(Node)i.next();
String n
=
bn.getData().getName();
if
(n.equals(fname))
return
bn;
}
return
null
;
}

public
List getDirChildren()
{
List c
=
new
Vector();
for
(
int
i
=
0
; i
<
children.size();i
++
)
{
Node n
=
(Node)children.get(i);
if
(
n.getData().isDirectory()
)c.add(n);
}
return
c;
}

public
List getFileChildren()
{
List c
=
new
Vector();
for
(
int
i
=
0
; i
<
children.size();i
++
)
{
Node n
=
(Node)children.get(i);
if
(
!
n.getData().isDirectory()
)c.add(n);
}
return
c;
}
}

private
ReadFilesAndBuiltTree()
{}

public
static
Node getTree(File rootDir)
{
Node r
=
new
Node();
r.setData(rootDir);
return
new
ReadFilesAndBuiltTree().builtTree(r);
}

private
Node builtTree(Node root)
{
if
(
!
root.getData().isDirectory())
return
root;
File f
=
root.getData();
File[] fs
=
f.listFiles();
for
(
int
i
=
0
; i
<
fs.length ; i
++
)
{
File ff
=
fs[i];
Node n
=
new
Node();
n.setData(ff);
n.setFather(root);
root.addChild(builtTree(n));
}
return
root;
}

public
static
void
main(String[] args)
throws
Exception
{
Node root
=
getTree(
new
File(ShowFileDir.ROOT_DIR));
Node cn
=
root.getChild(
"
maps
"
);
System.out.println(cn.getChildren().size());
}
}
输出文件
package test;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import test.ReadFilesAndBuiltTree.Node;

/** *//**
* Print the tree to screen
* */
public class ShowFileDir
{
public static String ROOT_DIR = "E:/y音乐";

public ShowFileDir()
{
}

public void printNodes()
{
Node root = ReadFilesAndBuiltTree.getTree(new File(ROOT_DIR));
printNode(root,0);
}

private void printNode(Node root,int depth)
{
if(!root.hasChildren())return;
pd(root.getData().getName(),depth);
pindent(++depth);
List l = root.getFileChildren();
pc(l,depth);
l = root.getDirChildren();
for(int i = 0 ; i < l.size() ; i++)
{
Node c = (Node)l.get(i);
printNode(c,depth);
}
}
// Screen methods 
private void pc(List l,int count)
{
Iterator i = l.iterator();
while(i.hasNext())
{
Node n = (Node)i.next();
pp(count);
p("+"+n.getData().getName()+"\n");
}
}
本文介绍了一个使用Java编写的简单递归程序,该程序能够遍历指定目录下的所有文件,并将这些文件组织成树形结构进行展示。通过构建文件树,可以清晰地查看目录结构及其中的文件。

被折叠的 条评论
为什么被折叠?



