假设有一个目录,包含很多文件和子目录,子目录又有若干子目录,请问如何用Java生成类似下面这样的效果?
自己调了半天,超过三级目录前面的竖线就开始对不齐了,快抓狂了,请高手指点,谢谢.upload
┣根目录文件1.txt
┣根目录文件2.txt
┣目录1
┃┣1.1.txt
┃┣1.2.txt
┃┣目录1.1
┃┃┣1.1.1.jnt
┃┃┣1.1.2.txt
┃┃┗目录1.1.1
┃┃ ┣New Text Document (2).txt
┃┃ ┗New Text Document.txt
┃┗目录1.2
┃ ┣New Text Document (2).txt
┃ ┗New Text Document.txt
┗目录2
┗2.1.txt
自己调了半天,超过三级目录前面的竖线就开始对不齐了,快抓狂了,请高手指点,谢谢.upload
┣根目录文件1.txt
┣根目录文件2.txt
┣目录1
┃┣1.1.txt
┃┣1.2.txt
┃┣目录1.1
┃┃┣1.1.1.jnt
┃┃┣1.1.2.txt
┃┃┗目录1.1.1
┃┃ ┣New Text Document (2).txt
┃┃ ┗New Text Document.txt
┃┗目录1.2
┃ ┣New Text Document (2).txt
┃ ┗New Text Document.txt
┗目录2
┗2.1.txt
import java.io.File;
public class MyTester { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File root=new File("D:\\MyEclipse 7.0\\test");
System.out.println(root.getName());
listFiles(root,0);
} private static void listFiles(File root,int level) {
// 判断root合法性省略
File[] f=root.listFiles();
for(File ff:f){
if(ff.isFile()){
for(int i=0;i<level;i++){
System.out.print("┃");
}
System.out.println("┣"+ff.getName());
}else{
for(int i=0;i<level;i++){
System.out.print("┃");
}
System.out.println("┗"+ff.getName());
listFiles(ff,++level);
//这行很关键
--level;
}
}
}}
1一些┗符号应该是┣,例如红色标记的,下面还有并列的节点.
2一些┣符号应该是┗,例如蓝色标记的,这个节点应该是它的父节点所有子节点的结束,应该用┗
我也是这三种符号处理不好,逻辑有点复杂.
c
┣DiskDigger.exe
┗E66
┃┗10538~10605证书
┃┃┣10538~10605.cer
┃┃┣10538~10605.key
┃┣10538~10605证书.rar
┃┣DOSPY 签名工具 v2.2.8.0428.exe
┃┣IME.txt
┗My Games
┃┗Dungeon Siege 2
┃┃┣DungeonSiege2.ini
┃┃┗Keys
┃┃┗Logs
┃┃┃┣DungeonSiege2.crash
┃┃┃┣dxdiag.txt
┃┃┗Save
┃┃┃┣current.gas
┃┃┃┣prefs.gas
┃┃┃┗SinglePlayer
┃┃┃┃┗Ming
┃┃┃┃┃┣Ming.ds2party
┃┃┃┃┃┣Ming.ds2party.bak
┃┃┃┃┃┣Ming.ds2radar
┃┃┃┃┃┣Ming.ds2radar.bak
┃┃┃┃┗YMX
┃┃┃┃┃┣YMX.ds2party
┃┃┃┃┃┣YMX.ds2party.bak
┃┃┃┃┃┣YMX.ds2radar
┃┃┃┃┃┣YMX.ds2radar.bak
┃┃┗Screenshots
┗恢复
┃┣sector117242.doc
┃┣sector118155.png
┗My Games
┃┗Dungeon Siege 2
┃┃┣DungeonSiege2.ini
┃┃┗Keys
┃┃┗Logs
┃┃┃┣DungeonSiege2.crash
┃┃┃┣dxdiag.txt
┃┃┗Save
┃┃┃┣current.gas
┃┃┃┣prefs.gas
┃┃┃┗SinglePlayer
┃┃┃┃┗Ming
┃┃┃┃┃┣Ming.ds2party
┃┃┃┃┃┣Ming.ds2party.bak
┃┃┃┃┃┣Ming.ds2radar
┃┃┃┃┃┣Ming.ds2radar.bak
┃┃┃┃┗YMX
┃┃┃┃┃┣YMX.ds2party
┃┃┃┃┃┣YMX.ds2party.bak
┃┃┃┃┃┣YMX.ds2radar
┃┃┃┃┃┣YMX.ds2radar.bak
┃┃┗Screenshots
┗恢复
import java.util.Stack;public class FileTreeTest {
public static void main(String[] args) {
FileTree tree = new FileTree("D:/green/apache/apache-tomcat-5.5.12/server");
tree.tree();
}
}class FileTree {
private File root;
public FileTree(File root) {
this.root = root;
}
public FileTree(String rootName) {
this(new File(rootName));
}
public void tree() {
Stack<Boolean> lastStack = new Stack<Boolean>();
tree(root, 0, lastStack);
} private void tree(File dir, int level, Stack<Boolean> lastStack) {
if(dir == null || !dir.exists()) {
return;
}
printFile(dir, level, lastStack);
if(dir.isFile()) {
return;
}
File[] children = dir.listFiles();
for(int i = 0; i < children.length; i++) {
lastStack.push(i == children.length - 1);
tree(children[i], level + 1, lastStack);
lastStack.pop();
}
}
private void printFile(File file, int level, Stack<Boolean> lastStack) {
for(int i = 0, k = lastStack.size() - 1; i < k; i++) {
System.out.print(lastStack.get(i) ? " " : "│ ");
}
if(level > 0) {
System.out.print(lastStack.get(lastStack.size() - 1) ? "└ " : "├ ");
}
System.out.println(level == 0 ? file.getPath() : file.getName());
}
}
D:\green\apache\apache-tomcat-5.5.12\server
├ classes
├ lib
│ ├ catalina-ant-jmx.jar
│ ├ catalina-ant.jar
│ ├ catalina-cluster.jar
│ ├ catalina-optional.jar
│ ├ catalina-storeconfig.jar
│ ├ catalina.jar
│ ├ commons-modeler.jar
│ ├ servlets-cgi.renametojar
│ ├ servlets-default.jar
│ ├ servlets-invoker.jar
│ ├ servlets-ssi.renametojar
│ ├ servlets-webdav.jar
│ ├ tomcat-ajp.jar
│ ├ tomcat-apr.jar
│ ├ tomcat-coyote.jar
│ ├ tomcat-http.jar
│ └ tomcat-util.jar
└ webapps
├ host-manager
│ ├ host-manager.xml
│ ├ images
│ │ ├ add.gif
│ │ ├ code.gif
│ │ ├ design.gif
│ │ ├ docs.gif
│ │ ├ fix.gif
│ │ ├ jakarta-logo.gif
│ │ ├ tomcat.gif
│ │ ├ update.gif
│ │ └ void.gif
│ ├ manager.xml
│ └ WEB-INF
│ ├ lib
│ │ └ catalina-host-manager.jar
│ └ web.xml
└ manager
├ html-manager-howto.html
├ images
│ ├ add.gif
│ ├ code.gif
│ ├ design.gif
│ ├ docs.gif
│ ├ fix.gif
│ ├ jakarta-logo.gif
│ ├ tomcat.gif
│ ├ update.gif
│ └ void.gif
├ manager-howto.html
├ manager.xml
├ status.xsd
├ WEB-INF
│ ├ lib
│ │ ├ catalina-manager.jar
│ │ └ commons-fileupload-1.0.jar
│ └ web.xml
└ xform.xsl
import java.util.Stack;public class FileTreeTest {
public static void main(String[] args) {
FileTree tree = new FileTree("D:/green/apache/apache-tomcat-5.5.12/server");
tree.tree();
}
}class FileTree {
private File root;
public FileTree(File root) {
this.root = root;
}
public FileTree(String rootName) {
this(new File(rootName));
}
public void tree() {
Stack<Boolean> lastStack = new Stack<Boolean>();
tree(root, 0, lastStack);
} private void tree(File dir, int level, Stack<Boolean> lastStack) {
if(dir == null || !dir.exists()) {
return;
}
printFile(dir, level, lastStack);
if(dir.isFile()) {
return;
}
File[] children = dir.listFiles();
for(int i = 0; i < children.length; i++) {
lastStack.push(i == children.length - 1);
tree(children[i], level + 1, lastStack);
lastStack.pop();
}
}
private void printFile(File file, int level, Stack<Boolean> lastStack) {
for(int i = 0, k = lastStack.size() - 1; i < k; i++) {
System.out.print(lastStack.get(i) ? " " : "┃ ");
}
if(level > 0) {
System.out.print(lastStack.peek() ? "┗ " : "┣ ");
}
System.out.println(level == 0 ? file.getPath() : file.getName());
}
}D:\green\apache\apache-tomcat-5.5.12\server
┣ classes
┣ lib
┃ ┣ catalina-ant-jmx.jar
┃ ┣ catalina-ant.jar
┃ ┣ catalina-cluster.jar
┃ ┣ catalina-optional.jar
┃ ┣ catalina-storeconfig.jar
┃ ┣ catalina.jar
┃ ┣ commons-modeler.jar
┃ ┣ servlets-cgi.renametojar
┃ ┣ servlets-default.jar
┃ ┣ servlets-invoker.jar
┃ ┣ servlets-ssi.renametojar
┃ ┣ servlets-webdav.jar
┃ ┣ tomcat-ajp.jar
┃ ┣ tomcat-apr.jar
┃ ┣ tomcat-coyote.jar
┃ ┣ tomcat-http.jar
┃ ┗ tomcat-util.jar
┗ webapps
┣ host-manager
┃ ┣ host-manager.xml
┃ ┣ images
┃ ┃ ┣ add.gif
┃ ┃ ┣ code.gif
┃ ┃ ┣ design.gif
┃ ┃ ┣ docs.gif
┃ ┃ ┣ fix.gif
┃ ┃ ┣ jakarta-logo.gif
┃ ┃ ┣ tomcat.gif
┃ ┃ ┣ update.gif
┃ ┃ ┗ void.gif
┃ ┣ manager.xml
┃ ┗ WEB-INF
┃ ┣ lib
┃ ┃ ┗ catalina-host-manager.jar
┃ ┗ web.xml
┗ manager
┣ html-manager-howto.html
┣ images
┃ ┣ add.gif
┃ ┣ code.gif
┃ ┣ design.gif
┃ ┣ docs.gif
┃ ┣ fix.gif
┃ ┣ jakarta-logo.gif
┃ ┣ tomcat.gif
┃ ┣ update.gif
┃ ┗ void.gif
┣ manager-howto.html
┣ manager.xml
┣ status.xsd
┣ WEB-INF
┃ ┣ lib
┃ ┃ ┣ catalina-manager.jar
┃ ┃ ┗ commons-fileupload-1.0.jar
┃ ┗ web.xml
┗ xform.xsl