2

フォルダー内のすべてのファイルを削除するコードをいくつか作成しましたが、問題はこれが素晴らしいことですが、ディレクトリ内のすべてのファイルを削除できるようにしたいが、フォルダーはそのままにしておきたいので、それぞれに入る必要はありませんフォルダーを開き、その中のファイルを削除します。これが私の現在のコードです:

@ViewScoped
@ManagedBean
public class Delete {

    public void DeleteFiles() throws IOException {
        System.out.println("Called deleteFiles");
        File file = new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/up617648/");

        String[] myFiles;
        if (file.isDirectory()) {
            myFiles = file.list();
            for (int i = 0; i < myFiles.length; i++) {
                File myFile = new File(file, myFiles[i]);
                System.out.println(myFile);
                myFile.delete();
            }
            DeleteFiles2();
        }

    }
    public void DeleteFiles2() throws IOException {
        System.out.println("Called deleteFiles2");
        File file = new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/Uploaded/up617648/");

        String[] myFiles;
        if (file.isDirectory()) {
            myFiles = file.list();
            for (int i = 0; i < myFiles.length; i++) {
                File myFile = new File(file, myFiles[i]);
                System.out.println(myFile);
                myFile.delete();
            }
        }

    }
}

この目的を達成するためにコードを変更するにはどうすればよいですか?

編集 :

コードを次のように変更しました。

@ViewScoped
@ManagedBean
public class Delete {

    public void DeleteFiles() throws IOException {
        System.out.println("Called deleteFiles");
        File file = new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/");

        String[] myFiles;
        if (file.isDirectory()) {
            myFiles = file.list();
            for (int i = 0; i < myFiles.length; i++) {
                File myFile = new File(file, myFiles[i]);
                System.out.println(myFile);
               if (!myFile.isDirectory()) {
                    myFile.delete();
                }
            }
            DeleteFiles2();
        }

    }

これはすべてのフォルダーを呼び出しますが、これは私のコンソールです。

INFO: Called deleteFiles
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\cam01342
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\geg00061
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\null
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\up617648
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\up626088
INFO: Called deleteFiles2

Tt はこれらのフォルダ内のファイルを削除しません。どうすれば削除できますか?

編集 3: 再帰を使用すると、スタック オーバーフロー エラーが発生します。

これが私のコードです:

public void DeleteFiles() {
    File file = new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/");
    System.out.println("Called deleteFiles");
    if (file.isDirectory()) {
        for (File f : file.listFiles()) {
            DeleteFiles();
        }
    } else {
        file.delete();
    }
}
4

6 に答える 6

11

やってみませんか

if (!myFile.isDirectory()) myFile.delete();

それ以外の

myFile.delete();

?

于 2013-02-23T15:11:36.253 に答える
3

単に使用するだけ File.isDirectory()です。

ファイルかディレクトリかを確認するだけです。ファイルの場合は削除し、それ以外の場合はそのままにします

あなたの場合

if (!(myFile.isDirectory()))
{
 myFile.delete();
}
于 2013-02-23T15:12:04.143 に答える
3

これでいけると思います

public void deleteFiles(File folder) throws IOException {
    List<File> files = folder.listFiles()
    foreach(File file: files){
        if(file.isFile()){
            file.delete();
        }else if(file.isDirecotry()) {
            deleteFiles(file)
        }
    }
}

次に、呼び出す必要がありますdeleteFiles(new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/"))

于 2013-02-23T15:13:49.507 に答える
3

再帰を使用すると、非常にきれいです;-)

private void deleteFiles(File file) {
    if (file.isDirectory())
        for (File f : file.listFiles())
            deleteFiles(f);
    else
        file.delete();
}
于 2013-02-23T15:22:46.070 に答える
1

フォローアップの質問が必要だったという事実からも明らかなように、再帰はやり過ぎです。はるかに簡単な方法については、そこにある私の答えを参照してください。

スタックオーバーフローエラーの原因となる再帰的な削除

于 2013-02-23T16:30:06.960 に答える
0

以下の方法を使用できます。

public void deleteFiles(File folder) throws IOException {
    File[] files = folder.listFiles();
     for(File file: files){
            if(file.isFile()){
                String fileName = file.getName();
                boolean del= file.delete();
                System.out.println(fileName + " : got deleted ? " + del);
            }else if(file.isDirectory()) {
                deleteFiles(file);
            }
        }
    }
于 2016-02-03T09:45:28.423 に答える