8

指定された文字列がファイルまたはディレクトリであるかどうかを確認したいのですが、 Fileクラスのメソッド isFile() および isDirectory() を試しましたが、問題は、ディレクトリまたはファイルが存在しない場合、これらのメソッドが false を返すことです。 、 javadoc に記載されているため:

isFile() :

この抽象パス名が示すファイルが存在し、通常のファイルである場合にのみ true 。それ以外の場合は false

isDirectory() :

この抽象パス名が示すファイルが存在し、ディレクトリである場合にのみ true 。それ以外の場合は false

基本的に、存在句のない2つのメソッドが必要です...

したがって、指定された文字列がディレクトリ形式に準拠しているか、マルチプラットフォームのコンテキストでファイル形式に準拠しているかをテストしたいと思います (したがって、Windows、Linux、および Mac Os X で動作するはずです)。

これらのメソッドを提供するライブラリはありますか? これらのメソッドの最適な実装は何でしょうか?

アップデート

そのパスを持つファイルが存在しない場合、デフォルトで両方(拡張子なし)になる可能性のある文字列の場合、ディレクトリとして識別される必要があります。

4

4 に答える 4

8

したがって、指定された文字列がディレクトリ形式に準拠しているか、マルチプラットフォームのコンテキストでファイル形式に準拠しているかをテストしたいと思います (したがって、Windows、Linux、および Mac Os X で動作するはずです)。

Windows では、ディレクトリに拡張子を付けることができ、ファイルに拡張子を付ける必要はありません。そのため、文字列を見ただけではわかりません。

ディレクトリには拡張子がなく、ファイルには常に拡張子があるというルールを適用すると、拡張子を探すことでディレクトリとファイルの違いを判断できます。

于 2011-12-27T20:13:05.623 に答える
4

への呼び出しでそれらをラップしないのはなぜFile#exists()ですか?

File file = new File(...);
if (file.exists()) {

    // call isFile() or isDirectory()

}

isFile()そうすることで、 andの「存在する」部分が存在するisDirectory()ことが保証されるため、効果的に否定されます。


あなたがここで尋ねていることを誤解している可能性もあります。質問の 2 番目の部分を考えると、存在しないファイルに対してisFile()andを使用して、それらがファイルまたはディレクトリのように見えるかどうかを確認しようとしていますか?isDirectory()

もしそうなら、それをFileAPI で行うのは困難です (そして、一般的に行うのは困難です)。/foo/bar/baz存在しない場合、それがファイルなのかディレクトリなのかを判断することはできません。どちらでもかまいません。

于 2011-12-27T20:12:00.160 に答える
2

あなたの更新によると、あなたが何を望んでいるかを知っているように聞こえます.パスが存在せず、パスに拡張子がある場合はファイルであり、そうでない場合はディレクトリです. このようなもので十分です:

private boolean isPathDirectory(String myPath) {
    File test = new File(myPath);

    // check if the file/directory is already there
    if (!test.exists()) {
        // see if the file portion it doesn't have an extension
        return test.getName().lastIndexOf('.') == -1;
    } else {
        // see if the path that's already in place is a file or directory
        return test.isDirectory();
    }
}
于 2011-12-28T00:17:21.580 に答える