我一直在努力解决这个问题,所以也许有些人可以帮助我。我有一个带有完整路径的文件列表(这些只是文件在另一台机器上的字符串),例如:
C:\a\b\c\file1.txt
C:\a\b\c\file2.txt
C:\a\d\file3.txt
C:\e\file4.txt
我想创建一个Jtree来显示目录结构,如下所示:
C:
a
b
c
file1.txt
file2.txt
d
file3.tct
e
file4.txt
我已经在分隔符上拆分了字符串,所以最终得到了像这样的数组列表:
"C:","a","b","c","file1.txt"
"C:","a","b","c","file2.txt"
"C:","a","d","file3.txt"
"C:","e","file4.txt"
现在,我想一次为它们添加一个索引,但是如果该值已经在该级别存在,则跳到下一个索引。也就是说,它将添加第一个数组,然后在第二个数组上将在树的级别0上进行,已经存在“ C:”,因此移至树的级别1和数组的索引1。我的问题是我不确定如何以这种方式导航树。
有任何建议和/或替代实施方式?
让File
完成解析和维护路径的工作。当您想在JTree
中显示文件时,您也可以创建一个对应的TreeModel
,例如FileTreeModel
,并引用为here。因为它实现了TreeModel
,所以可以“将其设置为JTree
的模型,然后您将拥有一个普通的旧标准JTree
”。您可以将任何已安装文件系统中的任何File
用作根,例如:
TreeModel model = new FileTreeModel(new File(System.getProperty("user.dir")));
JTree tree = new JTree(model);
我不确定FileTreeModel是否是最佳方法-它会扫描整个目录。从您写的内容来看,我想您只想显示列表中的路径。您可以通过使用此处描述的TreePathsTreeModel来实现它:How I Show Windows Registry in jTree?您只需要将文件路径从字符串转换为TreePath对象。
首先,对字符串进行排序(在拆分之前)。
如何处理第一行很明显,我不会对此发表评论。在第二行中,搜索已构建的树并检查节点是否已存在。找到不存在的内容后,请按照第一行中的步骤进行操作。
如果需要递归列出目录,甚至需要进行复制,粘贴(管理文件)之类的操作,则>]
我为此目的创建了一个项目,您可以在github上查看代码:https://github.com/ricardojlrufino/JExplorerTree
功能
-延迟加载(仅在扩展时)-没有额外的依赖关系(扩展JPanel并使用JTree)-外部拖放(往返操作系统)-内部拖放(在树内)-键盘支持:F2,DELETE,ENTER-CTRL + C,CTRL + V,CTRL + X(内部)-CTRL + V(来自外部文件)-CTRL + C(允许将JTree形式复制到外部)-应对外部变化(灰显)-本机图标支持-基本操作