在连接完整文件路径时显示仅文件名列表

时间:2016-03-07 00:59:33

标签: java list file javafx filenames

我希望能够显示仅显示文件名而不是整个文件路径的文件列表。

目前我有一个文件列表。当我单击其中一个文件时,侦听器将其传递给超出范围的方法,该方法将加载文件。

这意味着如果我只是传递一个只是文件名的列表,它将不再起作用,因为我的监听器需要一个完整的文件路径。关于如何存储文件名列表同时将它们链接到完整文件路径,我没有任何想法。

很高兴回答您的任何问题。非常感谢,

注意:小的for循环显示了我如何从文件路径中提取文件名,但我目前没有对它进行任何操作。这只是向您展示我已经走了多远的一个例子。

public void GetFilesFromFolder(String dirName) throws IOException {
        File dir = new File(dirName);
        File[] files = dir.listFiles((File dir1, String filename) -> filename.endsWith(".mp3"));
        String[] fileName = new String[files.length];
        int x = 0;
        for (File file : files) {
            String fileTemp = file.toString();
            fileTemp = fileTemp.substring(fileTemp.lastIndexOf("\\" + 1));
            System.out.println(fileTemp);
            fileName[x] = fileTemp;
            System.out.println(fileName[x]);
            x++;
        }
        observableList.clear();
        observableList.addAll(files);
    }

    public void SetFileListView() throws IOException {
        listView.setItems(null);
    }

    public VBox listStack() throws IOException {
        vbox = new VBox();
        vbox.getChildren().add(listView);

        listView.setItems(observableList);
        listView.setMinHeight(500);
        MusicDataModel mdm = MainView.getMainView().musicDataModel;
        MusicDataViewController mdv = MainView.getMainView().musicDataViewController;
        listView.getSelectionModel().selectedItemProperty().addListener((ObservableValue<? extends File> observable, File oldValue, File newValue) -> {
            try {
                mdm.load(newValue.toString());
                mdv.SetValues();
            } catch (UnsupportedTagException | InvalidDataException | IOException | NotSupportedException ex) {
                Logger.getLogger(FileListView.class.getName()).log(Level.SEVERE, null, ex);
            }
        });
        return vbox;
    }

1 个答案:

答案 0 :(得分:2)

使用File填充列表视图,就像当前一样,并使用列表视图上的单元工厂来更改文件的显示方式:

listView.setCellFactory(lv -> new ListCell<File>() {
    @Override
    protected void updateItem(File file, boolean empty) {
        super.updateItem(file, empty);
        setText(file == null ? null : file.getName());
    }
});

这将确保列表视图中的每个单元格仅显示文件名(文件的完整路径的最后一个组件),尽管它仍然保留File实例作为其数据(因此您可以仍然可以选择File等。