// 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);
}
}
}
分享到:
相关推荐
基于nodejs程序,读取本地指定目录,生成可预览的树状目录,操作简单,小巧灵活。
遍历整个目录,然后根据遍历结果生成树.是学习文件夹操作及树控件使用的很好的例子
一个较好的遍历程序,对系统所有的文件获取做了比较详细的说明。程序在2000下通过。
可用于客户端,获取服务器端指定目录下的结构,用于实现远程管理。
读取文件夹下所有文件,可以设置特定类型,并读取该文件的创建日期。供需要的朋友使用,附件为网上资源,根据实际情况做了调整,注意代码顺序!
VC 文件目录遍历生成树菜菜单,生成目录树的VC 源码范例,自动读取指定文件夹下的所有目录和文件,并生成Tree目录树结构。PS注:示例程序读取的是“成绩表”文件夹下的目录和文件,因此在测试时候要把生成的exe从...
内容索引:VC/C++源码,文件操作,遍历,目录树,FileTree 生成目录树结构的一个好范例,自动读取指定文件夹的内容,并遍历文件夹下的目录,最后生成TREE目录树结构。在XP下测试通过。
labview树形结构显示文件目录,选择文件夹之后自动生成目录列表
NodeJs实现读取目录文件(node dir_new list),以及文件批量生成(node dir_new)
该工具可以将Windows操作系统下的目录结构自动生成,生成效果如博客所示https://blog.csdn.net/SeaLong_/article/details/108995079
在固定位置寻找文件夹和文件,如果没有则生成文件。在ini文件里面写数据并读取数据。
国外开源的PHP Flash图片相册 目录直读版,直接读取images文件夹中的图片并显示,无需XML配置文件,想当方便实用。对编写AS脚本有一定要求,从事Flash as脚本编程的可拿去参考学习。 本Flash相册运行需要PHP环境...
提供两种bat命令方式,自动读取文件夹目录下所有文件的路径。快速生成txt文本。
创建一个TXT文档,用于详细列出所有待生成文件夹的层级关系。在文档中,每一行代表一个完整的层级链,各层级文件夹名称之间以英文逗号(,)作为分隔符,回车键换行。 例如:一级目录,二级目录,三级目录,四级目录 ...
用VB动态读取文件夹目录并生成结构树,配置文件类型为*.*时候为显示所有的文件~
这是针对那个隐藏文件夹,再在U盘下生成同名的文件夹病毒做的一个小程序,程序运行时( 我没有做自动运行处理)当有U盘接上电脑时,会自动检测U盘上是否有用心启动病毒的autorun.inf文件,如果发现,会读取文件的信息;...
执行bat程序会读取到当前文件夹的所有文件名并生成LIST.TXT文件,当文件特别多时想要获取所有文件名称,点击此程序可以轻松获取,工作中非常实用!
自动读取当前文件目录下全部文件并在当前目录下生成dir.txt的文件列表。
Java读取CSV用Load命令插入Neo4j与JDBC读取Neo4j数库生成Echarts关系图 需要注意的是 ...2.插入数据时,csv需要放在你的数据库下的...3.查询数据库生成Echarts关系图时自己下载Echarts3放在生成文件的同级目录js文件夹下
东莞域天 YT88 YT699 简单型 密码型NCL-1 易用经济型 专业型 加密狗数据读取工具, 先运行加密狗检测工具检测加密狗型号, 检测完后对照加密狗类型将对应文件夹内的.dll文件复制到软件安装好的目录里面,也就是和...