StringBuilder 拆分不适用于某些文件

StringBuilder split not working on some files

我正在尝试获取每个文件的父目录并将其放入 Java fx 中的 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\Downloads8815 - Kopie (2).jpg

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

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

C:\Users\Test\Downloads8815 - Kopie.jpg

C:\Users\Test\Downloads8815.jpg

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

您的直接问题是您滥用了 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());
}