如何使用 JavaFX 从树视图中的绝对路径获取文件夹或文件名?

How to fetch the folder or files names from an absolute path in a tree View using JavaFX?

itemlist.java:::

public class itemlist {

public TreeItem<File> createNode(final File f) {
return new TreeItem<File>(f) {
private boolean isLeaf;
private boolean isFirstTimeChildren = true;
private boolean isFirstTimeLeaf = true;`

@Override
public ObservableList<TreeItem<File>> getChildren() {
  if (isFirstTimeChildren) {
    isFirstTimeChildren = false;
    super.getChildren().setAll(buildChildren(this));
  }
  return super.getChildren();
}

@Override
public boolean isLeaf() {
  if (isFirstTimeLeaf) {
    isFirstTimeLeaf = false;
    File f = (File) getValue();
    isLeaf = f.isFile();
  }
  return isLeaf;
}

private ObservableList<TreeItem<File>> buildChildren(
    TreeItem<File> TreeItem) {
  File f = TreeItem.getValue();
  if (f == null) {
    return FXCollections.emptyObservableList();
  }
  if (f.isFile()) {
    return FXCollections.emptyObservableList();
  }
  File[] files = f.listFiles();
 // String allfiles= files.toString();
  //allfiles.

  if (files != null) {
    ObservableList<TreeItem<File>> children = FXCollections
        .observableArrayList();
    for (File childFile : files) {
      children.add(createNode(childFile));
    }
    return children;
  }
  return FXCollections.emptyObservableList();
}

controller.java::::

public void initialize(URL location, ResourceBundle resources) {
    // TODO Auto-generated method stub
    
    itemlist obj=new itemlist();
    TreeItem<File> rt =obj.createNode(new File("c:\"));
    fileView.setRoot(rt);`

所以这给了我这样的输出 C:\programfiles ->C:\programfiles\java ->C:\programfiles\python 我想要的只是删除这些绝对路径并只是游戏 file/folder 名称。我知道使用 getName 会有所帮助,但如何在我的代码中实现 getName()?

您可以将通用类型从 File 更改为 String 并仅使用文件名:

    class ItemList {
    
        public TreeItem<String> createNode(final File f) {
            return new TreeItem<String>(f.getName()) {
                private boolean isLeaf;
                private boolean isFirstTimeChildren = true;
                private boolean isFirstTimeLeaf = true;
    
                @Override
                public ObservableList<TreeItem<String>> getChildren() {
                    if (isFirstTimeChildren) {
                        isFirstTimeChildren = false;
                        super.getChildren().setAll(buildChildren(f));
                    }
                    return super.getChildren();
                }
    
                @Override
                public boolean isLeaf() {
                    if (isFirstTimeLeaf) {
                        isFirstTimeLeaf = false;
                        isLeaf = f.isFile();
                    }
                    return isLeaf;
                }
    
                private ObservableList<TreeItem<String>> buildChildren(
                        File f) {
    
                    if (f == null) {
                        return FXCollections.emptyObservableList();
                    }
                    if (f.isFile()) {
                        return FXCollections.emptyObservableList();
                    }
                    File[] files = f.listFiles();
                    
                    if (files != null) {
                        ObservableList<TreeItem<String>> children = FXCollections
                                .observableArrayList();
                        for (File childFile : files) {
                            children.add(createNode(childFile));
                        }
                        return children;
                    }
                    return FXCollections.emptyObservableList();
                }
            };
        }
    }
    ItemList obj = new ItemList();
    TreeItem<String> rt = obj.createNode(new File("/"));
    TreeView<String> treeView = new TreeView<>(rt);