【Java入門】file・directoryの削除で失敗しない方法(delete)

JavaのFileクラスにはファイルやディレクトリの削除を行うdeleteメソッドがあります。

この記事では、deleteメソッドについて

・deleteでファイルを削除する方法
・ファイル削除に失敗していないかの確認方法

という基本的な内容から、

・deleteでディレクトリを削除する方法
・ディレクトリの削除に失敗しない方法

などの応用的な内容に関しても解説していきます。

今回はそんなdeleteメソッドについて、さまざまな方法をわかりやすく解説します!

なお、Javaの記事については、こちらにまとめています。

目次

deleteとは

Fileクラスのdeleteメソッドは、指定したファイルを削除するためのメソッドです。

deleteメソッドは、boolean型の値を返します。

public boolean delete()

注意点としてファイルの削除処理は、実行してしまうと取り消し操作はできませんので、慎重に行う必要があります。

ファイルを削除する方法(deleteの使い方)

以下にdeleteメソッドを使用した、ファイル削除の基本的な使い方を記述します。

なお、Fileクラスを使用するにはjava.io.Fileをインポートする必要があります。

import java.io.File;
import java.io.IOException;

public class Main {
 
    public static void main(String[] args) {
        
        File file = new File("/Users/Shared/java/java.txt");
        
        //deleteメソッドを使用してファイルを削除する
        file.delete();        
    }
 
}

このサンプルコードでは、Fileクラスのインスタンスの引数に削除対象のファイル”/Users/Shared/java/java.txt”を指定し、deleteメソッドでファイルを削除しています。

ファイルの存在有無を確認する方法

ファイルを削除する前に削除対象のファイルが存在するか確認する場合は、Fileクラスのexistsメソッドを使用します。

ファイルの存在を確認する方法については、以下の記事で詳しく説明しています。

ファイル削除に失敗していないかの確認方法

deleteメソッドは、ただ実行しただけでは、ファイル削除に成功したかわかりません

前述したようにdeleteメソッドはboolean型の結果を返しますので、if文の中でdelete処理を記述すれば、ファイル削除に成功したか判断することができます。

import java.io.File;

public class Main {
 
    public static void main(String[] args) {
        
        File file = new File("/Users/Shared/java/java.txt");
 
        //existsメソッドを使用してファイルの存在を「確認する
        if (file.exists()) {
            //deleteメソッドを使用してファイルを削除する
            if (file.delete()) {
                System.out.println("ファイル削除成功");
            } else {
                System.out.println("ファイル削除失敗");
            }
        } else {
            System.out.println("ファイルが存在しない");
        }
    }
 
}

実行結果:

ファイル削除成功

このサンプルコードでは、if文を使用してファイル削除の判定可否を行っています。

また、Fileクラスのexistsメソッドを使用すれば、事前に対象のファイルが存在するか確認することができます。

ディレクトリを削除する方法

ファイルではなくディレクトリを削除する場合は、ファイル削除と同じくdeleteメソッドを使用することで削除が可能です。

ディレクトリ削除時は、Fileクラスのインスタンスの引数にディレクトリパスを指定しておきます。

File dir = new File("/Users/Shared/java");
dir.delete();

ディレクトリの削除に失敗しない方法

ディレクトリを削除する場合の注意点として、削除対象のディレクトリにサブディレクトリやファイルが存在すると、削除が失敗してしまいます。

そのため、対象のディレクトリを完全に削除するためには、まずディレクトリ配下のファイルやサブディレクトリを確認します。

そして存在する場合はディレクトリ内のファイルやサブディレクトリを先に削除しておく必要があります。

以下に指定したディレクトリを、完全に削除するサンプルを記述します。

import java.io.File;

class fileClass{
    public static void fileClass(File TestFile) {
        
        if (TestFile.exists()) {
            
            //ファイル存在チェック
            if (TestFile.isFile()) {
                //存在したら削除する
                if (TestFile.delete()) {
                    System.out.println("ファイル削除");
                }
            //対象がディレクトリの場合
            } else if(TestFile.isDirectory()) {
                
                //ディレクトリ内の一覧を取得
                File[] files = TestFile.listFiles();
                
                //存在するファイル数分ループして再帰的に削除
                for(int i=0; i<files.length; i++) {
                    fileClass(files[i]);
                }
                
                //ディレクトリを削除する
                if (TestFile.delete()) {
                    System.out.println("ディレクトリ削除成功");
                }else{
                    System.out.println("ディレクトリ削除失敗");
                }
            }
        } else {
            System.out.println("ディレクトリが存在しない");
        }
    }
}

public class Main {
 
    public static void main(String[] args) {
        
        //削除対象のディレクトリを指定する
        File dir = new File("/Users/Shared/java/");
 
        fileClass.fileClass(dir);
    }
 
}

実行結果:

ディレクトリ削除成功

このサンプルコードでは、fileClass.javaよりFileクラスのインスタンスで、削除対象のディレクトリを指定し、fileClassのオブジェクトを呼び出しています。

fileClassクラスでは、まずFileクラスのオブジェクトを指定して、ディレクトリ・ファイル存在チェックを行っています。

ディレクトリが存在した場合は、listFilesメソッドを使用して、ディレクトリ内の一覧を取得しています。

次にlistFilesメソッドで取得した要素分ループを回して、指定したディレクトリのファイルやサブディレクトリを、自身を呼び出して再帰的に削除しています。

ファイルを再帰的に削除する方法

ファイルを再帰的に削除する方法については、以下の記事でも解説しています。

Fileクラスについてもっと詳しく知りたい方へ

Fileクラスのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

まとめ

ここでは、Fileクラスを使用した、ファイルやディレクトリを削除するdeleteメソッドについて説明しました。

ファイルの削除処理自体は、deleteメソッドを使用するだけで行えますが、完全に削除するためには、さまざまな処理を駆使しなければいけないことがわかって頂けたかと思います。

もしdeleteメソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次