`
QIAN_QIAN
  • 浏览: 139167 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

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();
		}
	}
}

 

 

分享到:
评论

相关推荐

    C#控制台用递归方法显示树形结构

    在这个场景中,我们将探讨如何使用C#语言来实现一个控制台应用,它能用递归方法显示一个类似于图书类别的树形结构。 首先,我们需要理解什么是递归。递归是一种解决问题的方法,它通过调用自身来解决子问题,直到...

    递归显示数据库目录树+BBS

    在IT领域,数据库目录树的递归展示是一个常见的需求,特别是在管理和组织大量数据时。这里我们探讨的主题是如何使用递归算法来实现这个功能,并结合BBS(电子公告板系统)的相关应用。`ArticleTree.java`文件很可能...

    avl树的c++实现,包括在控制台中绘制树

    在C++中实现AVL树,首先需要定义一个表示节点的结构体或类,包含键值、高度、左子节点和右子节点。节点的高度是其子树的最大深度,用于判断和调整树的平衡。以下是节点结构体的基本定义: ```cpp struct TreeNode {...

    java源码包---java 源码 大量 实例

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    prefixspan序列模式挖掘算法的源代码

    - **支持度**:一个序列模式在数据库中出现的次数,是衡量其频繁程度的标准。 - **前缀**:一个序列模式的一部分,用于扩展生成新的模式。 - **后缀**:一个序列模式的剩余部分,相对于给定前缀而言。 3. **算法...

    Apriori算法(java)

    这个算法的核心思想是通过迭代的方式查找数据库中的频繁项集,并在此基础上生成强关联规则。 ### Apriori算法的基本步骤 1. **生成候选集**: Apriori算法首先从单个项开始生成一个初始的频繁项集。接着,根据给定...

    java源码包2

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    JAVA上百实例源码以及开源项目源代码

    算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象...

    java源码包3

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    java源码包4

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象...

    数据挖掘Apriori算法实现.rar

    Apriori算法的核心思想是基于“频繁项集”的递归生成与剪枝,即如果一个项集不频繁,那么它的任何超集也不可能频繁。 Apriori算法的工作流程主要包括以下几步: 1. **生成候选集**:首先,通过扫描交易数据库,找...

    基于C++实现(控制台)抽象数据类型B树【100010603】

    在计算机科学中,B树(B-tree)是一种自平衡的树数据结构,广泛应用于数据库和文件系统中,以支持高效的数据检索。B树的主要特点包括分层存储、平衡分布、多路分支,这使得它在大数据量操作中表现出色。本项目将详细...

    杨辉三角源程序

    【杨辉三角源程序】是编程初学者在学习过程中实现的一个小项目,它涉及到了计算机科学中的基础算法和数据结构。杨辉三角,又称帕斯卡三角,是一种数学上的二项式系数阵列,有着丰富的数学特性,在组合数学、概率论...

    PrintBTree.zip_print_btree_二叉树 图形化_打印二叉树

    本文将深入探讨如何使用C语言实现一个名为`print_btree`的功能,以图形化方式在控制台中打印二叉树,便于观察和理解树的结构。 首先,我们需要定义二叉树节点的数据结构。在C语言中,这可以通过创建一个结构体来...

    二叉树求深度

    二叉树是一种特殊的树结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。在计算机科学中,二叉树的应用广泛,包括文件系统、...在实际编程中,理解并掌握这种递归算法对于处理树形结构的问题至关重要。

Global site tag (gtag.js) - Google Analytics