读取文件夹生成目录树
// modelimport java.util.Set;public class Node {// 标识符private int id;// 节点名称private String name;// 层次private int level;// 是否叶子节点private boolean leaf;// 父节点 * --- 1private Node parent; // 一的一端// 子节点 1 --- *private Set<Node> children; // 多的一端public int getId() {return id;}public void setId(int id) {this.id = id;}public boolean isLeaf() {return leaf;}public void setLeaf(boolean leaf) {this.leaf = leaf;}public int getLevel() {return level;}public void setLevel(int level) {this.level = level;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Node getParent() {return parent;}public void setParent(Node parent) {this.parent = parent;}public void setChildren(Set<Node> children) {this.children = children;}public Set<Node> getChildren() {return children;}}// Node.hbm.xml<hibernate-mapping> <class name="com.bjsxt.hibernate.Node" table="t_node"> <id name="id"> <generator column="pid"/> <set name="children" lazy="extra" inverse="true"> <key column="pid"/> <one-to-many name="code">import junit.framework.TestCase;public class NodeManagerTest extends TestCase {public void testCreateTree() {NodeManager.getInstance().createTree("D:\\hibernate_basemapping\\");} public void testPrintTree() {NodeManager.getInstance().printTree(1);}}import java.io.File;import java.util.Iterator;import java.util.Set;import org.hibernate.Session;public class NodeManager {private static NodeManager nodeManager;private NodeManager() {} public static synchronized NodeManager getInstance() {if (nodeManager == null) {nodeManager = new NodeManager();}return nodeManager;}// 创建树型结构public void createTree(String dir) {Session session = HibernateUtils.getSession();try {session.beginTransaction();File root = new File(dir); // 创建文件目录saveTree(root, session, null, 0);session.getTransaction().commit();} catch (RuntimeException e) {e.printStackTrace();session.getTransaction().rollback();} finally {HibernateUtils.closeSession(session);}}// 递归创建一棵树private void saveTree(File file, Session session, Node parent, int level) {if (file == null || !file.exists()) {return;}boolean isLeaf = file.isFile();Node node = new Node();node.setName(file.getName());node.setLevel(level);node.setParent(parent);node.setLeaf(isLeaf);session.save(node);File[] subs = file.listFiles();if (subs != null && subs.length > 0) {for (int i = 0; i < subs.length; i++) {saveTree(subs[i], session, node, level + 1);}}}public void printTree(int id) {Session session = HibernateUtils.getSession();try {session.beginTransaction();Node root = (Node) session.load(Node.class, id);printNode(root);session.getTransaction().commit();} catch (RuntimeException e) {e.printStackTrace();session.getTransaction().rollback();} finally {HibernateUtils.closeSession(session);}}private void printNode(Node node) {if (node == null) {return;}int level = node.getLevel();if (level > 0) {for (int i = 0; i < level; i++) {System.out.print(" |");}System.out.print("--");}System.out.println(node.getName()+ (node.isLeaf() ? "" : "[" + node.getChildren().size() + "]"));Set<Node> children = node.getChildren();for (Iterator<Node> iter = children.iterator(); iter.hasNext();) {Node child = iter.next();printNode(child);}}}