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

こんにちは!フリーエンジニアのヤマシタです。

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

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

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

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

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

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

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

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メソッドを使用します。

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

【速習Java】Fileクラスのexistsでファイルの存在チェック
更新日 : 2019年5月3日

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

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

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

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

【Java入門】Fileの削除(delete、強制削除、拡張子の指定)
更新日 : 2017年8月23日

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

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

JavaのFileクラスをマスター!基礎から便利な使い方まで総まとめ
更新日 : 2019年5月10日

まとめ

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

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

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

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部として、これまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。プログラミング初学者に向けてわかりやすく、ためになるコンテンツ作りを心がけています。

おすすめコンテンツ

まずはここから!初心者でも1から学べるプログラミング入門カリキュラム

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー