パスがファイルまたはフォルダーを表すかどうかを確認する


141

Stringがファイルまたはディレクトリのパスを表すかどうかを確認する有効なメソッドが必要です。Androidで有効なディレクトリ名は何ですか?出てきたように、フォルダー名には'.'文字を含めることができるので、ファイルやフォルダーがあるかどうかをシステムはどのように理解しますか?


2
「システムはファイルまたはフォルダがあるかどうかをどのように理解するのですか」:システムどうやって理解できないのですか ファイルシステムのディスク上にあり、どちらか一方です。
ローンの侯爵

回答:


203

仮定pathはあなたStringです。

File file = new File(path);

boolean exists =      file.exists();      // Check if the file exists
boolean isDirectory = file.isDirectory(); // Check if it's a directory
boolean isFile =      file.isFile();      // Check if it's a regular file

Javadocを参照File


または、NIOクラスFilesを使用して、次のようなことを確認できます。

Path file = new File(path).toPath();

boolean exists =      Files.exists(file);        // Check if the file exists
boolean isDirectory = Files.isDirectory(file);   // Check if it's a directory
boolean isFile =      Files.isRegularFile(file); // Check if it's a regular file

私の質問で述べたように、私は文字列しか持っておらず、ファイルインスタンスも持っていません。それらを作成することはできません。
エゴール

1
path私の例ではStringです。Fileインスタンスを作成できないのはなぜですか?これはファイルシステム上の何も変更しないことに注意してください。
Baz

具体的な例を示します。次のパスを使用してファイルを作成しようとしています。/mnt/sdcard/arc/root。isDirectory()の場合はfalseを返します。ここの問題は何ですか?
エゴール

@Egor私はAndroidデバイスを持っていないので、かなり難しいです。rootファイルである可能性があることに注意してください。ファイルに.something拡張子が付いているとは限りません。
Baz

10
isDirectory()メソッドは、ファイルが存在し、それがディレクトリである場合にのみtrueを返します。パスで指定されたファイルが存在しない場合もfalseを返します。与えられたパスが存在しないか、それが存在するが、それはディレクトリではありません...希望それは場合に役立ちます。..偽を返します)(isDirectoryそれはそう
Praful Bhatnagar

50

nio APIを使用したままソリューションをクリーンアップします。

Files.isDirectory(path)
Files.isRegularFile(path)

ディレクトリのリストをループする場合は、これがより良い答えです。ここでは、File毎回新しいオブジェクトを作成するのではなく、静的クラスを使用してこれらのチェックを実行しています。メモリを
節約

2
尋ねられた質問に答えません。Files.isDirectory()は文字列を受け入れません。
gerardw

21

これらのチェックを実行するには、nio APIに固執してください

import java.nio.file.*;

static Boolean isDir(Path path) {
  if (path == null || !Files.exists(path)) return false;
  else return Files.isDirectory(path);
}

2
質問がJavaコード(タグを参照)を求めているときに、なぜScalaで答えを出すのですか?
Baz

6
@Baz ScalaはJavaに対して共変であるため...冗談です:-D。答えを更新しました。

一時ディレクトリを作成し、そこにディレクトリとファイルを作成できます。次に、上記のコードを使用してアサートします。一方では、通常のファイル/ディレクトリを使用します。それ以外の場合は、作成されていないアイテムのダミーパスを使用します。
Gondri 2018年


3

システムがどうかを指示するための方法はありませんString表すfileか、directoryそれがあれば、存在しないファイルシステムでは。例えば:

Path path = Paths.get("/some/path/to/dir");
System.out.println(Files.isDirectory(path)); // return false
System.out.println(Files.isRegularFile(path)); // return false

そして、次の例の場合:

Path path = Paths.get("/some/path/to/dir/file.txt");
System.out.println(Files.isDirectory(path));  //return false
System.out.println(Files.isRegularFile(path));  // return false

したがって、どちらの場合もシステムがfalseを返すことがわかります。これは、両方のために真であるjava.io.Filejava.nio.file.Path


2

文字列がプログラムでパスまたはファイルを表すかどうかを確認するには、次のようなAPIメソッドを使用する必要があります isFile(), isDirectory().

ファイルやフォルダがあるかどうかをシステムはどのように理解しますか?

おそらく、ファイルとフォルダのエントリはデータ構造に保持され、ファイルシステムによって管理されています。



0
public static boolean isDirectory(String path) {
    return path !=null && new File(path).isDirectory();
}

質問に直接答える。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.