六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 100|回复: 0

利用递归算法,把一个文件的所有文件都保存到数据库中,并在控制台打印出来

[复制链接]

升级  63.33%

41

主题

41

主题

41

主题

秀才

Rank: 2

积分
145
 楼主| 发表于 2013-2-5 09:08:49 | 显示全部楼层 |阅读模式
Node.java
package com.pk.tree;import java.util.Set;public class Node {private int id;private String name;private int level; //层次private boolean leaf;//是否是叶子private Node parents;//父节点private Set childrens;//子节点public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getLevel() {return level;}public void setLevel(int level) {this.level = level;}public boolean isLeaf() {return leaf;}public void setLeaf(boolean leaf) {this.leaf = leaf;}public Node getParents() {return parents;}public void setParents(Node parents) {this.parents = parents;}public Set getChildrens() {return childrens;}public void setChildrens(Set childrens) {this.childrens = childrens;}} 
 
Node.hbm.xml
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.pk.tree"><class name="Node" table="t_node"><id name="id"><generator class="native"></generator></id><property name="name"></property><property name="level"></property><property name="leaf"></property><many-to-one name="parents" column="pid"></many-to-one><set name="childrens" inverse="true"><key column="pid"></key><one-to-many class="Node" /></set></class></hibernate-mapping> 
 
NodeCreate.java
package com.pk.tree;import java.io.File;import java.util.Iterator;import java.util.List;import java.util.Set;import org.hibernate.Session;import org.hibernate.Transaction;import com.pk.util.HibernateUtil;public class NodeCreate {private NodeCreate(){}private static NodeCreate nodeCreate;public static synchronized NodeCreate getInstance(){if(nodeCreate==null){nodeCreate=new NodeCreate();}return nodeCreate;}public void createTree(String filepath){Session session=null;Transaction tx=null;try{session=HibernateUtil.getSession();tx=session.beginTransaction();File root=new File(filepath);//真正的见表save(root,session,parent,int level)saveNode(root,session,null,1);tx.commit();}catch(Exception e){e.printStackTrace();tx.rollback();}finally{HibernateUtil.closeSession(session);}}private void saveNode(File root,Session session ,Node parents,int level){boolean leaf=root.isFile();Node node=new Node();node.setName(root.getName());node.setLevel(level);node.setLeaf(leaf);node.setParents(parents);session.save(node);File[] files=root.listFiles();if(files!=null&&files.length>0){for(int i=0;i<files.length;i++){saveNode(files[i],session,node,level+1);}}}public void printNode(int id){Session session=null;Transaction tx=null;try{session=HibernateUtil.getSession();tx=session.beginTransaction();Node root=(Node) session.load(Node.class, id);//打印其中的所有信息printAllNode(root,session);tx.commit();}catch(Exception e){e.printStackTrace();tx.rollback();}finally{HibernateUtil.closeSession(session);}}private void printAllNode(Node root,Session session){boolean leaf=root.isLeaf();//System.out.println(root.getId()+"********"+root.getName());int level=root.getLevel();if(level==1){System.out.println(root.getName());}else{for(int i=0;i<level;i++){System.out.print("| ");}System.out.println("--"+root.getName()+ (leaf ?"":"["+root.getChildrens().size()+"]"));}Set nodeList=root.getChildrens();//List nodeList=session.createQuery("select a from Node a where pid="+root.getId()).list();for(Iterator it=nodeList.iterator();it.hasNext();){Node node=(Node) it.next();printAllNode(node,session);}}} 
MainTest.java
package com.pk.tree;import org.hibernate.cfg.Configuration;import org.hibernate.tool.hbm2ddl.SchemaExport;public class MainTest {public static void main(String[] args) {Configuration cfg=new Configuration().configure();SchemaExport export=new SchemaExport(cfg);export.create(true, true);}} 
TestTree.java
package com.pk.test;import com.pk.tree.NodeCreate;import junit.framework.TestCase;public class TestTree extends TestCase {public void testSave(){NodeCreate.getInstance().createTree("E:\\aa\\workspace\\hibernate_8_many2many\\");}public void testPrint(){NodeCreate.getInstance().printNode(1);}} 
HibernateUtil.java
package com.pk.util;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class HibernateUtil {private static SessionFactory sessionFactory;static{try{Configuration cfg=new Configuration().configure();sessionFactory=cfg.buildSessionFactory();}catch(HibernateException e){e.printStackTrace();throw new ExceptionInInitializerError();}}public static SessionFactory getSessionFactory(){return sessionFactory;}public static Session getSession(){return sessionFactory.openSession();}public static void closeSession(Session session){if(session!=null){if(session.isOpen()){session.close();}}}public static void closeSessionFactory(){if(sessionFactory!=null){sessionFactory.close();}}} 
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表