はい、グロブパターンが絶対的であるかどうかを調べるには、プログラム的な方法が必要です。これは以下のように行うことができます。Windows上で
for (String glob : new String[] { "../path/*.txt", "c:/../path/*.txt", "/../path/*.txt" }) {
System.out.println(glob + ": is " + (new File(glob).isAbsolute() ? "absolute" : "relative"));
}
この意志出力
../path/*.txt: is relative
c:/../path/*.txt: is absolute
/../path/*.txt: is relative
UNIX上の最後には、絶対的です。グロブパターンが相対的であることが分かっている場合は、それに特別なディレクトリを追加します。その後、すべてのグロブパターンの絶対パスを取得し、それを使用して検索用に指定することができます。
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"));
}
これはなぜあなたが指定したくないあなたはまだ自分をグロブ行うか、あなたが言及したポスト(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パターンが最初に相対的であるかどうかを尋ねるプログラム的な方法が必要です。 –