假设我有一个目录结构。
/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
1szpjjfi1#
是的,这是可能的,但可能不像您想象的那么简单,您可以使用Files.walk方法,如下所示:
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
tyg4sfes2#
假设你有一个基于linux发行版的应用程序。您可以运行以下unix命令:使用Process Builder的find . -name d/e/f/yourFilename这将返回完整的文件路径到您的文件,其中将包括未知部分。然后您可以将其分配给一个字符串,并在您的Java应用程序中使用。
find . -name d/e/f/yourFilename
11dmarpk3#
您可以按照其他答案中的指示硬编码搜索方法。或者,保持与模式的灵活匹配。您需要一些模式语言来指定路径:
一旦你有了这样的模式匹配器,使用树遍历算法(递归地遍历目录结构),将每个绝对路径名与你的模式匹配,如果匹配,执行一些操作。请注意,Java中似乎存在一些globbing-请参见在Java中使用glob匹配路径字符串
3条答案
按热度按时间1szpjjfi1#
是的,这是可能的,但可能不像您想象的那么简单,您可以使用
Files.walk
方法,如下所示:输出:
tyg4sfes2#
假设你有一个基于linux发行版的应用程序。
您可以运行以下unix命令:使用Process Builder的
find . -name d/e/f/yourFilename
这将返回完整的文件路径到您的文件,其中将包括未知部分。然后您可以将其分配给一个字符串,并在您的Java应用程序中使用。
11dmarpk3#
您可以按照其他答案中的指示硬编码搜索方法。或者,保持与模式的灵活匹配。您需要一些模式语言来指定路径:
一旦你有了这样的模式匹配器,使用树遍历算法(递归地遍历目录结构),将每个绝对路径名与你的模式匹配,如果匹配,执行一些操作。
请注意,Java中似乎存在一些globbing-请参见在Java中使用glob匹配路径字符串