问题描述
我正在尝试获取每个文件的父目录并将其放入 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\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
第一个树文件,名字中带 () 的文件不起作用,文件名仍然在 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());
}