web-dev-qa-db-ja.com

Javaでディレクトリコンテンツを削除する方法は?

ディレクトリを列挙した後、すべてのファイルを削除する必要があります。

私が使用した:

final File[] files = outputFolder.listFiles();
files.delete();

しかし、これはディレクトリを削除していません。

76
lola

ファイルごとにこれを行う必要があります。

public static void deleteFolder(File folder) {
    File[] files = folder.listFiles();
    if(files!=null) { //some JVMs return null for empty dirs
        for(File f: files) {
            if(f.isDirectory()) {
                deleteFolder(f);
            } else {
                f.delete();
            }
        }
    }
    folder.delete();
}

それから電話する

deleteFolder(outputFolder);
115
NCode

ファイルを含むフォルダーを削除するには、ループや再帰的な検索は必要ありません。直接使用できます:

FileUtils.deleteDirectory(<File object of directory>);

この関数は、フォルダーとフォルダー内のすべてのファイルを削除します。

簡単なパイ:)

93
DHRUV BANSAL

削除する前に、すべてのファイルをディレクトリから削除する必要があります。

多くの一般的なユーティリティを備えたサードパーティのライブラリがあります。これにはあなたのためにそれを行うものも含まれます:

10
Bozho

配列を削除することはできません!これはもっとうまくいくはずです:

for (File f : files) f.delete();

ただし、フォルダが空でない場合は機能しません。この場合、フォルダー階層に再帰的に降りて、すべてを削除する必要があります。はい、それは残念ですJavaはデフォルトではそれができません...

7
solendil

以下は、ライブラリなしで問題を解決するための可能な解決策の1つです。

public static boolean delete(File file) {

    File[] flist = null;

    if(file == null){
        return false;
    }

    if (file.isFile()) {
        return file.delete();
    }

    if (!file.isDirectory()) {
        return false;
    }

    flist = file.listFiles();
    if (flist != null && flist.length > 0) {
        for (File f : flist) {
            if (!delete(f)) {
                return false;
            }
        }
    }

    return file.delete();
}
6
user2546090

File配列は削除できません。他のすべての答えが示唆するように、フォルダを削除する前に個々のファイルを削除する必要があります...

final File[] files = outputFolder.listFiles();
for (File f: files) f.delete();
outputFolder.delete();
4
fireshadow52

FileUtils.deleteDirectory()でFileUtilsを使用します。

3
Dellanio
for(File f : files) {
    f.delete();
}    
files.delete(); // will work
1
Vaandu