Java:可以用一个未知的目录来命名路径吗?

gdx19jrr  于 2023-01-24  发布在  Java
关注(0)|答案(3)|浏览(120)

假设我有一个目录结构。

/a/b/c/<unknown name>/d/e/f/<files>

对于Windows:

C:\a\b\c\<unknown name>\d\e\f<files>

我知道a/b/c总是在那里,d/e/f/也是。
我不知道它们之间的目录(),但我知道只有1个。
在Java中有没有一种方法可以命名这个路径,而不会找出要访问的1未知目录的名称?
像这样?

/a/b/c/*/d/e/f
1szpjjfi

1szpjjfi1#

是的,这是可能的,但可能不像您想象的那么简单,您可以使用Files.walk方法,如下所示:

Path root = Paths.get("S:\\Coding\\");

    String prefix = "A\\AB";
    String suffix = "B\\C";
    
    Path searchRoot = root.resolve(prefix);
    
    System.err.println(searchRoot);
    
    List<Path> paths = Files.walk(searchRoot).filter(f -> f.endsWith(suffix)).collect(Collectors.toList());
    
    paths.forEach(System.out::println);

输出:

stderr: S:\Coding\A\AB
stdout: S:\Coding\A\AB\ZZZ\B\C
tyg4sfes

tyg4sfes2#

假设你有一个基于linux发行版的应用程序。
您可以运行以下unix命令:使用Process Builderfind . -name d/e/f/yourFilename
这将返回完整的文件路径到您的文件,其中将包括未知部分。然后您可以将其分配给一个字符串,并在您的Java应用程序中使用。

11dmarpk

11dmarpk3#

您可以按照其他答案中的指示硬编码搜索方法。或者,保持与模式的灵活匹配。您需要一些模式语言来指定路径:

  • shell 通常使用globbing
  • 或者,您可以使用regexp来区分需要的文件和不需要的文件。

一旦你有了这样的模式匹配器,使用树遍历算法(递归地遍历目录结构),将每个绝对路径名与你的模式匹配,如果匹配,执行一些操作。
请注意,Java中似乎存在一些globbing-请参见在Java中使用glob匹配路径字符串

相关问题