`
huakaile
  • 浏览: 63145 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

读取文件夹生成目录树

阅读更多
// model
import java.util.Set;

public class Node {

	// 标识符
	private int id;

	// 节点名称
	private String name;

	// 层次
	private int level;

	// 是否叶子节点
	private boolean leaf;

	// 父节点 * --- 1
	private 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 class="native"/>
        </id>
        <property name="name"/>
        <property name="level"/>
        <property name="leaf"/>
        <many-to-one name="parent" column="pid"/>
        <set name="children" lazy="extra" inverse="true">
        	<key column="pid"/>
        	<one-to-many class="com.bjsxt.hibernate.Node"/>
        </set>
    </class>
</hibernate-mapping>
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);
		}
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics