Java 在连接完整文件路径时仅显示文件名列表
我想能够显示一个文件列表,只显示文件名,而不是整个文件路径 目前我有一个文件列表。当我单击其中一个文件时,侦听器会将其传递给加载该文件的范围外的方法 这意味着,如果我只是给它传递一个文件名列表,它将不再工作,因为我的侦听器需要一个完整的文件路径。我不知道如何在存储文件名列表的同时将它们链接到完整的文件路径 很高兴回答您的任何问题。非常感谢, 注意:小for循环显示了如何从文件路径中提取文件名,但目前我还没有对它做任何处理。这只是一个例子,告诉你我已经走了多远Java 在连接完整文件路径时仅显示文件名列表,java,list,file,javafx,filenames,Java,List,File,Javafx,Filenames,我想能够显示一个文件列表,只显示文件名,而不是整个文件路径 目前我有一个文件列表。当我单击其中一个文件时,侦听器会将其传递给加载该文件的范围外的方法 这意味着,如果我只是给它传递一个文件名列表,它将不再工作,因为我的侦听器需要一个完整的文件路径。我不知道如何在存储文件名列表的同时将它们链接到完整的文件路径 很高兴回答您的任何问题。非常感谢, 注意:小for循环显示了如何从文件路径中提取文件名,但目前我还没有对它做任何处理。这只是一个例子,告诉你我已经走了多远 public void GetFil
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;
}
public void GetFilesFromFolder(字符串dirName)引发IOException{
文件目录=新文件(目录名);
File[]files=dir.listFiles((File dir1,String filename)->filename.endsWith(“.mp3”);
String[]fileName=新字符串[files.length];
int x=0;
用于(文件:文件){
字符串fileTemp=file.toString();
fileTemp=fileTemp.substring(fileTemp.lastIndexOf(“\\”+1));
系统输出打印项次(fileTemp);
fileName[x]=fileTemp;
System.out.println(文件名[x]);
x++;
}
可观察列表。清除();
observableList.addAll(文件);
}
public void SetFileListView()引发IOException{
setItems(空);
}
公共VBox listStack()引发IOException{
vbox=新的vbox();
vbox.getChildren().add(listView);
setItems(可观察列表);
listView.setMinHeight(500);
MusicDataModel mdm=MainView.getMainView().MusicDataModel;
MusicDataViewController mdv=MainView.getMainView().MusicDataViewController;
listView.getSelectionModel().selectedItemProperty().addListener((Observalevalue像当前一样使用文件填充列表视图,并在列表视图上使用单元格工厂更改文件的显示方式:
listView.setCellFactory(lv -> new ListCell<File>() {
@Override
protected void updateItem(File file, boolean empty) {
super.updateItem(file, empty);
setText(file == null ? null : file.getName());
}
});
listView.setCellFactory(lv->new ListCell()){
@凌驾
受保护的void updateItem(文件,布尔值为空){
super.updateItem(文件,空);
setText(file==null?null:file.getName());
}
});
这将确保列表视图中的每个单元格仅显示文件名(文件完整路径的最后一个组件),尽管它仍然保留文件
实例作为其数据(因此您仍然可以获取选定的文件
,等等)
listView.setCellFactory(lv -> new ListCell<File>() {
@Override
protected void updateItem(File file, boolean empty) {
super.updateItem(file, empty);
setText(file == null ? null : file.getName());
}
});
listView.setCellFactory(lv->new ListCell()){
@凌驾
受保护的void updateItem(文件,布尔值为空){
super.updateItem(文件,空);
setText(file==null?null:file.getName());
}
});
这将确保列表视图中的每个单元格仅显示文件名(文件完整路径的最后一个组件),尽管它仍然保留文件
实例作为其数据(因此您仍然可以获取选定的文件
,等等).虽然这很有效,而且我很感激现在当我点击列表中的某个项目时,它会变慢,但是你能猜一猜是什么导致了它吗。我认为它可能会重新生成一些东西。没有线索。这更可能与你的侦听器代码有关,而不是与自定义单元格有关。updateItem(…)
方法被频繁调用,例如,如果您滚动,那么如果出现性能问题,您将在选择项目以外的时间看到它们。虽然这非常有效,而且我很感激现在当我单击列表中的某个项目时,它会变慢,但您是否可以猜测是什么导致了它。我假设它可能正在重新生成有些东西。没有线索。与自定义单元格相比,这更可能与您的侦听器代码有关。updateItem(…)
方法被频繁调用,例如,如果您滚动,那么如果存在性能问题,您将在选择项以外的时间看到它们。