既存のファイルが特定のディレクトリまたはそのサブディレクトリにあるかどうかをチェックしたいと思います。ファイルが(サブ)ディレクトリにあるかどうかを確認してください
私は2つのFileオブジェクトを持っています。
File dir;
File file;
両方が存在することが保証されています。のは、私は、このチェックは、今私は、チェックをこのようにやっているため、真
を返すようにしたい
dir = /tmp/dir
file = /tmp/dir/subdir1/subdir2/file.txt
を想定してみましょう:
String canonicalDir = dir.getCanonicalPath() + File.separator;
boolean subdir = file.getCanonicalPath().startsWith(canonicalDir);
これは私の限られたテストで動作するようですが、私はわかりませんよこれにより、一部のオペレーティングシステムで問題が発生する可能性があります。私はgetCanonicalPath()が処理する必要があるIOExceptionをスローすることもできないことも嫌いです。
良い方法がありますか?おそらくいくつかの図書館にありますか?
ありがとうございました
これは、アプリケーションで可能な "/tmp/something/../dir"のようなものが含まれているパスには問題がある可能性があります。 –
大文字小文字の区別がある場合は、 'child.getAbsolutePath()。startsWith(parent.getAbsolutePath())'を簡単に使用できます。 – rocketboy
実際には、getAbsolutePath()はそのような '/../'トークンをすべて計算し、ファイルシステムで実際の絶対パスを返します。 –