有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java StringBuilder拆分无法处理某些文件

我试图获取每个文件的父目录,并将其放入JavaFX中的ListView中

它确实有效,但对某些文件名无效,我不明白为什么

Iterator<String> listIterator = loadedFiles.iterator();
    StringBuilder listItem = null;
    while (listIterator.hasNext()) {

        File listFile = new File(listIterator.next());

        listItem = new StringBuilder(Arrays.toString(listFile.getAbsolutePath().split(listFile.getName())));
        toDir(listItem);
        ctrl.fileList.getItems().add(listItem.toString());
    }

获取文件路径,并切断文件名

今天:

private void toDir(StringBuilder builder) {
    builder.deleteCharAt(builder.length() - 1);
    builder.deleteCharAt(0);
    if (builder.charAt(builder.length() - 1) == '\\') {
        builder.deleteCharAt(builder.length() - 1);
    }
}

删除数组括号和最后一个“\”

给定的文件路径为:

C:\Users\Test\Downloads\048815 - Kopie (2).jpg

C:\Users\Test\Downloads\048815 - Kopie (3).jpg

C:\Users\Test\Downloads\048815 - Kopie (4).jpg

C:\Users\Test\Downloads\048815 - Kopie.jpg

C:\Users\Test\Downloads\048815.jpg

第一个树文件(名称中带有()的文件)不起作用,文件名仍在字符串中并添加到列表中,只有最后两个文件删除了文件名


共 (1) 个答案

  1. # 1 楼答案

    你眼前的问题是你误用了String#split()split()的参数是一个正则表达式,其中括号是分组元字符。您根本不想在这里使用split()。事实上,您最好使用java.nio.file.Path中的路径操作方法

    for (String fileName : loadedFiles)
    {
        Path filePath = Path.of(fileName);
        Path directory = filePath.getParent();
        ctrl.fileList.getItems().add(directory.toString());
    }
    

    一旦熟悉了API,就可以将其简化为

    for (String fileName : loadedFiles)
    {
        ctrl.fileList.getItems().add(Path.of(filename).getParent().toString());
    }