Да, вам понадобится программный способ узнать, является ли шаблон глобуса абсолютным. Это может быть сделано следующим образом:
for (String glob : new String[] { "../path/*.txt", "c:/../path/*.txt", "/../path/*.txt" }) {
System.out.println(glob + ": is " + (new File(glob).isAbsolute() ? "absolute" : "relative"));
}
В Windows это будет выводить
../path/*.txt: is relative
c:/../path/*.txt: is absolute
/../path/*.txt: is relative
В UNIX последний является абсолютным. Если вы знаете, что шаблон glob относительный, добавьте к нему специальный каталог. После этого у вас будет абсолютный путь для всех шаблонов glob и может использовать его для указания его для поиска.
EDIT 1 Как вы прокомментируете, вы можете сделать следующее. Но вы также можете смешивать и сопоставлять nio и io. Вы должны знать, что java.io.File.isAbsolute() проверяет только путь к файлу FORMAT, а не если файл действительно существует, чтобы определить, находится ли он в абсолютной или относительной форме. Он делает это в особой усадьбе на платформе.
String baseDir = "c:/BaseDir/";
for (String glob : new String[] { "../path/*.txt", "c:/../path/*.txt", "/../path/*.txt" }) {
File file = new File(glob);
if (!file.isAbsolute()) {
file = new File(baseDir, glob);
}
System.out.println(file.getPath() + ": is " + (file.isAbsolute() ? "absolute" : "relative"));
}
отпечатывается
c:\BaseDir\..\path\*.txt: is absolute
c:\..\path\*.txt: is absolute
c:\BaseDir\..\path\*.txt: is absolute
вам все равно придется сделать подстановку самостоятельно или использовать любые методы, описанные в посте вы упомянули (How to find files that match a wildcard string in Java?)
Почему вы не хотите, чтобы указать базовый каталог? Легко сделать те, у которых есть абсолютный путь, и вам нужно обрабатывать их с относительным путем. Вы также можете предоставить базовый каталог для них. – Guenther
Но если путь '../../*. Txt', то он не будет внутри базового каталога, из которого я разрешаю, и я не могу разрешить его с помощью Path.resolve, потому что' * 'не является символом юридического пути и генерирует исключение. Кроме того, если это абсолютный путь, то какой базовый каталог я должен указывать? На этот вопрос никогда не отвечали [здесь] (http://stackoverflow.com/questions/25682140/resolve-absolute-paths-with-wildcards-in-java-6). –
Кроме того, мне нужен программный способ спросить, является ли шаблон glob относительным в первую очередь. –