1

これまでのところ、ディレクトリ内のすべてのファイルを削除するコードを書いています:

@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/build/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();
            }
        }

    }
}

これを呼び出すと、すべてのファイルが呼び出されていることがわかりますが、何も削除されません。これはなぜですか、コンソールに次のように表示されます。

INFO: Called deleteFiles
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\build\web\resources\pdf\up617648\1.png
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\build\web\resources\pdf\up617648\lecture04_A_slides.pdf

パス内のすべてのファイルが削除されますが、Netbeans では、このフォルダーへの直接パスが空であっても、リソース フォルダー内のファイルを表示できます。クリーン ビルドを実行しました。

これは少し奇妙です。ディレクトリからファイルを正常に削除します.Netbeansではまだファイルが表示され、netbeansを再起動すると、ファイルがディレクトリに戻ってきます.

4

1 に答える 1

1

Windows のファイル システムは、Java の削除方法にはあまり適していません。ほとんどの場合、他の何かがそのファイルへの参照/ハンドルを保持しているため、Windows はそのファイルの削除を妨げています。以前に同じファイルに触れたことがあり、リソースを適切にクリーンアップしていない場合、これは文字通り何でもかまいません。JVM 自体でさえもです。

于 2013-02-23T14:39:13.163 に答える