gpt4 book ai didi

java - 在 ArrayList 中,如果其父目录已存在于列表中,如何删除子目录?

转载 作者:行者123 更新时间:2023-11-30 06:29:30 24 4
gpt4 key购买 nike

我有一个 ArrayList<String>包含目录路径,例如:

/home, /usr...

如果列表已经包含该元素的父目录,我想编写一个代码,从列表中删除所有路径。例如:如果列表包含:

/home
/home/games

然后,/home/games 应该被删除,因为它的父/home 已经在列表中。下面是代码:

for (int i = 0; i < checkedList.size(); i++) {
File f = new File(checkedList.get(i));
if(checkedList.contains(f.getParent()));
checkedList.remove(checkedList.get(i));
}

以上checkedListString arrayList .

当列表包含时出现问题:

/home
/home/games/minesweeper

现在扫雷文件夹不会被删除,因为它的父游戏不在列表中。如何去除这些元素呢?

最佳答案

另一种可能的解决方案是使用 String.startsWith(String)


当然,您可以利用 File 类的父级功能来处理相关目录和其他特殊性。遵循解决方案草案:

List<String> listOfDirectories = new ArrayList<String>();
listOfDirectories.add("/home/user/tmp/test");
listOfDirectories.add("/home/user");
listOfDirectories.add("/tmp");
listOfDirectories.add("/etc/test");
listOfDirectories.add("/etc/another");

List<String> result = new ArrayList<String>();

for (int i = 0; i < listOfDirectories.size(); i++) {
File current = new File(listOfDirectories.get(i));
File parent = current;
while ((parent = parent.getParentFile()) != null) {
if (listOfDirectories.contains(parent.getAbsolutePath())) {
current = parent;
}
}
String absolutePath = current.getAbsolutePath();
if (!result.contains(absolutePath)) {
result.add(absolutePath);
}
}

System.out.println(result);

这将打印:

[/home/user, /tmp, /etc/test, /etc/another]

关于java - 在 ArrayList 中,如果其父目录已存在于列表中,如何删除子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11460417/

24 4 0