Java 如何从JTree中获取所有文件/目录的列表
我有一个包含文件/目录的JTree,我想得到一个包含这个JTree的当前列表的列表 我该怎么做?Java 如何从JTree中获取所有文件/目录的列表,java,swing,listview,jtree,Java,Swing,Listview,Jtree,我有一个包含文件/目录的JTree,我想得到一个包含这个JTree的当前列表的列表 我该怎么做? menuItemZip.addActionListener(new AbstractAction() { public void actionPerformed(ActionEvent e) { boolean exist=false; File[] files = (File[]) tree.getModel().getRoot();
menuItemZip.addActionListener(new AbstractAction() {
public void actionPerformed(ActionEvent e) {
boolean exist=false;
File[] files = (File[]) tree.getModel().getRoot();
for (File file : files) {
if (file.getName().equals(selectedFile.getName()+".zip"))
exist = true;
break;
}
if(exist ==true)
new ZipWorkers(selectedFile,WORKING,status).execute();
btnRefresh.doClick();
}
});
编辑为新解决方案:只是我不知道这是否是一个好的解决方案
menuItemZip.addActionListener(new AbstractAction() {
public void actionPerformed(ActionEvent e) {
Enumeration enumeration = ((TreeNode) tree.getModel().getRoot()).children();
String filename = selectedFile.getName()+".zip";
boolean exist=false;
while (enumeration.hasMoreElements()){
String file = ((File) enumeration.nextElement()).getName();
if(file.equals(filename)){
exist=true;
break;
}
}
if(exist ==true)
new ZipWorkers(selectedFile,WORKING,status).execute();
btnRefresh.doClick();
}
});
您需要递归地下降到目录中(请参见
File.isDirectory()
,以确定它是否正确)。递归性可以通过编写一个函数来实现,该函数在一个文件数组上进行迭代,并使用目录的子项调用自己
boolean doesExist(File[] files, String searchFileName) {
boolean exists = false;
for (File f : files) {
if (f.getName().equals(searchFileName)) {
exist = true;
} else if (f.isDirectory()) {
exist = doesExist(f.listFiles(), searchFileName);
}
if (exist) {
break; // no need to proceed further
}
}
return exist;
}
那就叫它
doesExist((File[]) tree.getModel().getRoot(), selectedFile.getName()+".zip");
最简单的方法是,很好的例子和
也考虑一个变化,讨论。优点是在需要之前不需要检查节点。
这个问题令人困惑。树包含项目的降序层次结构,在本例中为文件。你能澄清一下你的清单是什么吗。。我可能完全误解了你的要求。你能澄清一下吗?我的清单是一份文件清单。我想如果你看一下代码,你会看到文件[]
文件。我在线程“AWT-EventQueue-1”java.lang.ClassCastException:中得到异常:
(文件[])树.getModel().getRoot()@itro-根据你发布的代码,我假设它已经对你起作用了。参见mKorbel的解决方案,使用TreeNode
而不是File[]
——使用递归的相同想法,虽然我做了如下操作,但我不确定这是否是一种好方法枚举=((TreeNode)tree.getModel().getRoot()).children();字符串文件名=selectedFile.getName()+“.zip”;布尔存在=假;while(enumeration.hasMoreElements()){String file=((file)enumeration.nextElement()).getName();if(file.equals(filename)){exist=true;break;}`@itro-您似乎有一些类型不一致:enumeration
应该包含TreeNode
s(TreeNode.children()
返回TreeNode
s的枚举-请参见TreeNode.getChildAt()
),但是您将元素强制转换到文件
+1以使用模型,以及解决实际问题。:-)
import java.util.Enumeration;
import javax.swing.JTree;
import javax.swing.tree.TreeNode;
public class Main {
public static void main(String[] argv) throws Exception {
JTree tree = new JTree();
visitAllNodes(tree);
}
public static void visitAllNodes(JTree tree) {
TreeNode root = (TreeNode) tree.getModel().getRoot();
visitAllNodes(root);
}
public static void visitAllNodes(TreeNode node) {
System.out.println(node);
if (node.getChildCount() >= 0) {
for (Enumeration e = node.children(); e.hasMoreElements();) {
TreeNode n = (TreeNode) e.nextElement();
visitAllNodes(n);
}
}
}
}