ファイルやディレクトリを削除する(Files.delete)

Files クラスで用意されている delete メソッドを使用することで、指定したファイルやディレクトリを削除することができます。ここでは Java を使ってファイルやディレクトリを削除する方法について解説します。

(Last modified: )

ファイルやディレクトリを削除する

存在しているファイルまたはディレクトリを削除するには Files クラスで用意されている delete メソッドを使用します。 delete メソッドはクラスメソッドです。書式は次のとおりです。

public static void delete(Path path) throws IOException

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

例外:
NoSuchFileException - ファイルが存在しない場合(オプションの固有例外)
DirectoryNotEmptyException - ファイルがディレクトリで、ディレクトリが空でないために削除できなかった場合(オプションの固有例外)
IOException - 入出力エラーが発生した場合
SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされている場合は、SecurityManager.checkDelete(String)メソッドが呼び出されてファイルへの削除アクセスがチェックされます。

1 番目の引数に削除するファイルまたはディレクトリを表す Path オブジェクトを指定します。メソッドを実行すると、指定したパスが表すファイルまたはディレクトリを削除します。なおファイルがシンボリック・リンクの場合、リンク先のファイルではなくシンボリック・リンク自体が削除されます。

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

削除するファイルやディレクトリが存在しなかった場合は NoSuchFileException 例外が発生します。ディレクトリを削除する場合に、ディレクトリが空でなかった場合は DirectoryNotEmptyException 例外が発生します。

次のサンプルをみてください。ファイルを削除します。

Path p = Paths.get("C:/code/java/file/report.txt");

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

C:\code\java\file ディレクトリの中の report.txt ファイルを削除します。ファイルが存在していなかった場合は例外が発生します。

次のサンプルをみてください。今度はディレクトリを削除します。

Path p = Paths.get("C:/code/java/file/doc");

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

C:\code\java\file ディレクトリの中の doc ディレクトリを削除します。ディレクトリが存在していなかったり、ディレクトリの中が空でなかった場合は例外が発生します。

サンプルコード

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

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

class JSample6_1{
  public static void main(String[] args){
    Path p = Paths.get("C:/code/java/file/report.txt");

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

コンパイルを行います。

javac -encoding UTF-8 JSample6_1.java

削除しようとしている report.txt ファイルは存在している状態です。

ファイルやディレクトリを削除する(1)

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

java JSample6_1

ファイルやディレクトリを削除する(2)

指定したパスが示すファイルが削除されました。

ファイルやディレクトリを削除する(3)

なおファイルが存在していない状態でもう一度同じプログラムを実行すると例外が発生します。

ファイルやディレクトリを削除する(4)

ファイルやディレクトリが存在している場合だけ削除する

Files.delete メソッドの場合、削除しようとするファイルやディレクトリが存在しなかった場合は例外が発生します。ファイルやディレクトリが存在していた場合だけ削除を行うには Files クラスで用意されている deleteIfExists メソッドを使用します。 deleteIfExists メソッドはクラスメソッドです。書式は次のとおりです。

public static boolean deleteIfExists(Path path) throws IOException

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

戻り値:
ファイルがこのメソッドによって削除された場合はtrue、ファイルが存在しないために削除できなかった場合は false

例外:
DirectoryNotEmptyException - ファイルがディレクトリで、ディレクトリが空でないために削除できなかった場合(オプションの固有例外)
IOException - 入出力エラーが発生した場合
SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされている場合は、SecurityManager.checkDelete(String)メソッドが呼び出されてファイルへの削除アクセスがチェックされます。

1 番目の引数に削除するファイルまたはディレクトリを表す Path オブジェクトを指定します。メソッドを実行すると、指定したパスが表すファイルまたはディレクトリが存在している場合に削除します。なおファイルがシンボリック・リンクの場合、リンク先のファイルではなくシンボリック・リンク自体が削除されます。

ディレクトリが空でなかった場合は DirectoryNotEmptyException 例外が発生します。

次のサンプルをみてください。ファイルを削除します。

Path p = Paths.get("C:/code/java/file/report.txt");

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

C:\code\java\file ディレクトリの中の report.txt ファイルを削除します。ファイルが存在していなかった場合は何も行いません。

サンプルコード

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

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

class JSample6_2{
  public static void main(String[] args){
    Path p = Paths.get("C:/code/java/file/doc");

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

コンパイルを行います。

javac -encoding UTF-8 JSample6_2.java

削除しようとしている doc ディレクトリは存在している状態です。

ファイルやディレクトリが存在している場合だけ削除する(1)

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

java JSample6_2

ファイルやディレクトリが存在している場合だけ削除する(2)

指定したパスが示すディレクトリが削除されました。

ファイルやディレクトリが存在している場合だけ削除する(3)

なおディレクトリが存在していない状態でもう一度同じプログラムを実行しても例外は発生しません。

ファイルやディレクトリが存在している場合だけ削除する(4)

-- --

Java を使ってファイルやディレクトリを削除する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。