import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.UUID; public class FileTreeUtil { public static final String END_STRING = "|__"; /** * 打印文件夹树状结构 * * @param dirPath * @param level * @throws IOException */ public static void listDirTree(String dirPath, int level) throws IOException { File file = new File(dirPath); if (file.isFile()) { System.out.println(getBlankString(level) + END_STRING + file.getName()); return; } File[] files = file.listFiles(); for (File tmpFile : files) { if (tmpFile.isDirectory()) { System.out.println(getBlankString(level) + END_STRING + tmpFile.getName()); listDirTree(tmpFile.getCanonicalPath(), level + 1); } else { System.out.println(getBlankString(level) + END_STRING + tmpFile.getName()); } } } public static String getBlankString(int level) { String str = "--"; for (int i = 0; i < level; i++) { str += "---"; } return str; } static class FileInfo { public String id; //父id public String pid; public String name; public boolean isDir; public FileInfo(String id, String pid, String name, boolean isDir) { super(); this.id = id; this.pid = pid; this.name = name; this.isDir = isDir; } public FileInfo() { super(); } } /** * 打印list树状结构,FileInfo关联父子关系 * @param list * @param root * id为0的是root * @param level */ public static void listDirTree(List<FileInfo> list, FileInfo root, int level, StringBuilder sb) { if (!root.isDir) { sb.append(getBlankString(level) + END_STRING + root.name + "<br/>\n"); return; } for (FileInfo tmpFile : list) { if (tmpFile.pid.equals(root.id)) { if (tmpFile.isDir && !"0".equals(tmpFile.id)) { sb.append(getBlankString(level) + END_STRING + tmpFile.name + "\n"); listDirTree(list, tmpFile, level + 1, sb); } else { sb.append(getBlankString(level) + END_STRING + tmpFile.name + "\n"); } } } } public static String getUUID() { return UUID.randomUUID().toString().replaceAll("-", "").substring(0, 8); } public static void main(String[] args) throws IOException { //listDirTree("E:\\code\\niiam-project\\cloud-3d-app\\app\\src\\main\\java", 0); List<FileInfo> list = new ArrayList<>(); FileInfo root = new FileInfo("0", "-1", "Docs", true); list.add(root); list.add(new FileInfo("1", "0", "1", true)); list.add(new FileInfo("2", "0", "2", true)); list.add(new FileInfo("3", "0", "3", true)); list.add(new FileInfo("11", "1", "11", true)); list.add(new FileInfo("22", "2", "22", true)); list.add(new FileInfo("33", "3", "33", true)); list.add(new FileInfo("44", "1", "44", true)); list.add(new FileInfo("55", "1", "55", true)); list.add(new FileInfo("66", "1", "66", true)); list.add(new FileInfo("111", "11", getUUID() + ".java", false)); list.add(new FileInfo("222", "11", getUUID() + ".java", false)); list.add(new FileInfo("333", "11", getUUID() + ".java", false)); list.add(new FileInfo("444", "11", getUUID() + ".java", false)); list.add(new FileInfo(getUUID(), "0", getUUID() + ".c", false)); list.add(new FileInfo(getUUID(), "0", getUUID() + ".c", false)); list.add(new FileInfo(getUUID(), "0", getUUID() + ".c", false)); list.add(new FileInfo(getUUID(), "1", getUUID() + ".py", false)); list.add(new FileInfo(getUUID(), "2", getUUID() + ".py", false)); list.add(new FileInfo(getUUID(), "3", getUUID() + ".py", false)); System.out.println("|__Docs"); StringBuilder sb = new StringBuilder(); listDirTree(list, root, 1, sb); System.out.println(sb.toString()); } }
效果:
|__Docs
-----|__1
--------|__11
-----------|__68391d65.java
-----------|__68334e67.java
-----------|__5cc92bb6.java
-----------|__756283d5.java
--------|__44
--------|__55
--------|__66
--------|__6f4f9617.py
-----|__2
--------|__22
--------|__536037ce.py
-----|__3
--------|__33
--------|__1ae6670d.py
-----|__0c3f7888.c
-----|__5f940aec.c
-----|__d329743b.c