我有一个包含文件/目录的JTree,我想获得一个包含此JTree当前列表的列表。
我该怎么做?
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();
}
});
答案 0 :(得分:3)
您需要以递归方式下降到目录中(请参阅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");
答案 1 :(得分:3)
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);
}
}
}
}
答案 2 :(得分:2)
还要考虑FileTreeModel
的变体,讨论here。优点是您无需在需要之前检查节点。