ファイルの状態を調べる(実行可能/隠しファイル/読み取り/書き込み/シンボリック・リンク)

広告

ファイルに関する色々な状態を調べる方法について解説します。具敵的には(1)実行可能か(2)隠しファイルか(3)読み取り可能か(4)書き込み可能か(5)シンボリック・リンクか、などを調べます。

ファイルが実行可能かどうか(Files.isExecutable)

Path オブジェクトが表すファイルが実行可能かどうか調べるには Files クラスで用意されている isExecutable メソッドを使用します。 isExecutable メソッドはクラスメソッドです。書式は次のとおりです。

public static boolean isExecutable?(Path path)

パラメータ:
path - チェックするファイルへのパス

戻り値:
ファイルが存在し、実行可能な場合はtrue。ファイルが存在しないか、Java仮想マシンに十分な特権がないために実行アクセスが拒否されるか、またはアクセスを判断できない場合はfalse

例外:
SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされている場合は、checkExecが呼び出されてファイルへの実行アクセスがチェックされます

1 番目の引数に対象の Path オブジェクトを指定します。 Path オブジェクトが表すファイルが実行可能だった場合には true を返します。ファイルが実行でなかったりファイルが存在しない場合には false を返します。

※ Path オブジェクトを使ってファイルやディレクトリを表す方法については「Pathオブジェクトを使ってファイルやディレクトリを表す」を参照されてください。

次のサンプルをみてください。

Path p = Paths.get("doc/memo.txt");
System.out.println(Files.isExecutable(p));

カレントディレクトリの下にある doc/memo.txt が実行権限があれば true を返し、実行権限がなければ false を返します。

ファイルが隠しファイルかどうか(Files.isHidden)

Path オブジェクトが表すファイルが隠しファイルかどうか調べるには Files クラスで用意されている isHidden メソッドを使用します。 isHidden メソッドはクラスメソッドです。書式は次のとおりです。

public static boolean isHidden?(Path path) throws IOException

パラメータ:
path - テストするファイルへのパス

戻り値:
ファイルが隠しとみなされる場合true

例外:
IOException - 入出力エラーが発生した場合
SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされている場合は、checkReadメソッドが呼び出されてファイルへの読取りアクセスがチェックされます

1 番目の引数に対象の Path オブジェクトを指定します。 Path オブジェクトが表すファイルが隠しファイルだった場合には true を返します。そうでない場合には false を返します。

次のサンプルをみてください。

Path p = Paths.get("doc/memo.txt");

try{
  System.out.println(Files.isHidden?(p));
}catch(IOException e){
  System.out.println(e);
}

カレントディレクトリの下にある doc\memo.txt が隠しファイルであれば true を返し、隠しファイルでなければ false を返します。

ファイルが読み取り可能かどうか(Files.isReadable)

Path オブジェクトが表すファイルが読み取り可能かどうか調べるには Files クラスで用意されている isReadable メソッドを使用します。 isReadable メソッドはクラスメソッドです。書式は次のとおりです。

public static boolean isReadable?(Path path)

パラメータ:
path - チェックするファイルへのパス

戻り値:
ファイルが存在し、読取り可能な場合はtrue。ファイルが存在しないか、Java仮想マシンに十分な特権がないために読取りアクセスが拒否されるか、またはアクセスを判断できない場合はfalse

例外:
SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされている場合は、checkReadが呼び出されてファイルへの読取りアクセスがチェックされます

1 番目の引数に対象の Path オブジェクトを指定します。 Path オブジェクトが表すファイルが読み取り可能だった場合には true を返します。ファイルが読み取り可能でなかったりファイルが存在しない場合には false を返します。

次のサンプルをみてください。

Path p = Paths.get("doc/memo.txt");
System.out.println(Files.isReadable?(p));

カレントディレクトリの下にある doc\memo.txt が読み取り可能であれば true を返し、読み取り可能でなければ false を返します。

ファイルが書き込み可能かどうか(Files.isWritable)

Path オブジェクトが表すファイルが書き込み可能かどうか調べるには Files クラスで用意されている isWritable メソッドを使用します。 isWritable メソッドはクラスメソッドです。書式は次のとおりです。

public static boolean isWritable?(Path path)

パラメータ:
path - チェックするファイルへのパス

戻り値:
ファイルが存在し、書込み可能な場合はtrue。ファイルが存在しないか、Java仮想マシンに十分な特権がないために書込みアクセスが拒否されるか、またはアクセスを判断できない場合はfalse

例外:
SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされている場合は、checkWriteが呼び出されてファイルへの書込みアクセスがチェックされます

1 番目の引数に対象の Path オブジェクトを指定します。 Path オブジェクトが表すファイルが書き込み可能だった場合には true を返します。ファイルが書き込み可能でなかったりファイルが存在しない場合には false を返します。

次のサンプルをみてください。

Path p = Paths.get("doc/memo.txt");
System.out.println(Files.isWritable?(p));

カレントディレクトリの下にある doc\memo.txt が書き込み可能であれば true を返し、書き込み可能でなければ false を返します。

ファイルがシンボリック・リンクかどうか(Files.isSymbolicLink)

Path オブジェクトが表すファイルがシンボリック・リンクかどうか調べるには Files クラスで用意されている isSymbolicLink メソッドを使用します。 isSymbolicLink メソッドはクラスメソッドです。書式は次のとおりです。

public static boolean isSymbolicLink?(Path path)

パラメータ:
path - ファイルへのパス

戻り値:
ファイルがシンボリック・リンクである場合はtrue。ファイルが存在しないか、シンボリック・リンクでないか、またはファイルがシンボリック・リンクかどうかを判断できない場合はfalse
例外:
SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされていて、そのcheckReadメソッドがファイルへの読取りアクセスを拒否する場合

1 番目の引数に対象の Path オブジェクトを指定します。 Path オブジェクトが表すファイルがシンボリック・リンクだった場合には true を返します。ファイルがシンボリック・リンクでなかったりファイルが存在しない場合には false を返します。

次のサンプルをみてください。

Path p = Paths.get("doc/memo.txt");
System.out.println(Files.isSymbolicLink(p));

カレントディレクトリの下にある doc\memo.txt がシンボリック・リンクであれば true を返し、シンボリック・リンクでなければ false を返します。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample7-1.java という名前で保存します。

import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;

class JSample2_1{
  public static void main(String[] args){
    Path p1 = Paths.get("doc/report");
    Path p2 = Paths.get("doc/manual");
    Path p3 = Paths.get("doc/memo");

    checkDirectory(p1);
    checkDirectory(p2);
    checkDirectory(p3);
  }

  private static void checkDirectory(Path p){
    System.out.print(p.getFileName() + "は");
    if (Files.isDirectory(p)){
      System.out.println("ディレクトリです");
    }else{
      if (Files.exists(p)){
        System.out.println("ファイルです");
      }else{
        System.out.println("存在しません");
      }
    }
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample7_1.java

カレントディレクトリの下にある doc ディレクトリの中には memo1.txt 、 memo2.txt 、 memo3.txt の 3 つのファイルがあります。 memo1.txt は実行可能、読み取り可能、書き込み可能で、 memo2.txt は実行不可、読み取り不可、書き込み不可、隠しファイルで、 memo3.txt は memo1.txt へのシンボリック・リンクになっています。

ファイルの状態を調べる(1)

その後で、次のように実行してください。

java JSample7_1

ファイルの状態を調べる(2)

それぞれのファイルが実行可能か、読み取り可能か、書き込み可能か、隠しファイルか、シンボリック・リンクかを調べて出力しました。

-- --

ファイルに関する色々な状態を調べる方法について解説しました。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。