[code="java"]import java.io.File;
import java.util.*;
public class TestTree {
public static class TreeNode {
private File file;
private int level;
private boolean isEnd;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public boolean isEnd() {
return isEnd;
}
public void setEnd(boolean isEnd) {
this.isEnd = isEnd;
}
public TreeNode(File fileNode, int level, boolean isEnd) {
this.file = fileNode;
this.level = level;
this.isEnd = isEnd;
}
@Override
public String toString() {
return "[" + file.getPath() + "," + level + "," + isEnd + "]";
}
}
public static void main(String[] args) {
File f = new File("D:/test");
TreeNode root = new TreeNode(f, 0, true);
int cursor = 0;
List<TreeNode> list = new ArrayList<TreeNode>();
list.add(root);
do {
tree(cursor, list);
cursor++;
} while (cursor < list.size());
boolean[] haveLine = new boolean[20];
int level;
String line;
for (int i = 0; i < list.size(); i++) {
line = "";
level = list.get(i).getLevel();
for (int j = 0; j < level; j++) {
if (haveLine[j]) {
line = line + "|***";
} else {
line = line + "****";
}
}
haveLine[level] = !list.get(i).isEnd();
if (level != 0) {
line = line + "|_";
}
line = line + list.get(i).getFile().getPath();
System.out.println(line);
}
}
private static void tree(int currentCursor, List<TreeNode> list) {
File file = list.get(currentCursor).getFile();
if (!file.isDirectory()) {
return;
}
int newLevel = list.get(currentCursor).getLevel() + 1;
List<TreeNode> newList = new ArrayList<TreeNode>();
File[] childs = file.listFiles();
for (int i = 0; i < childs.length; i++) {
boolean isEnd = false;
if (i == childs.length - 1) {
isEnd = true;
}
TreeNode node = new TreeNode(childs[i], newLevel, isEnd);
newList.add(node);
}
list.addAll(currentCursor + 1, newList);
}
}[/code]
测试过可用:
D:\test
****|_D:\test\a
****|***|_D:\test\a\e
****|***|_D:\test\a\f.txt
****|_D:\test\b
****|_D:\test\c
****|_D:\test\a.txt