-2

ディレクトリ/フォルダ内のファイルを削除するにはどうすればよいですか

私はこのコードを使用しています:

private static final String FILE_DIR = "data\\session";
private static final String FILE_TEXT_EXT = ".cache";

private void DeleteCache(String folder, String ext){
        GenericExtFilter filter = new GenericExtFilter(ext);
        File dir = new File(folder);
         File fileDelete;
        String[] list = dir.list(filter);
        for(String file : list){
            String temp = new StringBuffer().append(File.separator).append(file).toString();
            fileDelete = new File(temp);
            boolean isDelete=fileDelete.delete();
            System.out.println("File : "+temp+"is Delete : "+isDelete);
        }

        if(list.length == 0 ) return;
    }
    public class GenericExtFilter implements FilenameFilter{
        private String ext;
        public GenericExtFilter(String ext){
            this.ext=ext;
        }
        public boolean accept (File dir, String name){
            return (name.endsWith(ext));
        }
    }

しかし、なぜはい、キャッシュを削除したくない場合、エラーの例

ファイル: \31052012-TPBSDERG.cache -is 削除: false

4

3 に答える 3

1

おそらくファイルが存在しないためです。

使ってみてください....

File[] list = dir.listFiles(filter);

その代わり

アップデート

ファイルが削除されない理由は多数あります。実際のプロセスは基盤となる OS によって異なりますが、最も一般的な理由は、ファイルが別のプロセス (またはプログラム) によって開かれている、ファイルを削除するための適切なアクセス許可がない、および/またはファイルが削除されていないことです。存在。

コードには興味深い問題がいくつかあります...

String temp = new StringBuffer().append(File.separator).append(file).toString();

これは、ファイルが存在する場所ではない「現在のドライブのルートディレクトリでファイルを探す」というファイルセパレータをファイルに追加しています。

例えば;

File dir = new File(System.getProperty("user.home"));
String[] list = dir.list(filter);
for(String file : list){
    String temp = new StringBuffer().append(File.separator).append(file).toString();
    System.out.println(temp + " - " + new File(temp).exists());
}

これは次のようなものを出力します...

/.bash_history - false
/.CFUserTextEncoding - false
/.config - false
/.cups - false

これは明らかに間違っています。これらのファイルはルート フォルダーに存在しません。

私がそうする場合も同様です。

File dir = new File(System.getProperty("user.home"));
String[] list = dir.list(filter);
for(String file : list){
    System.out.println(file + " - " + new File(file).exists());
}

これは次のようなものを出力します...

.bash_history - false
.CFUserTextEncoding - false
.config - false
.cups - false

これらのファイルは現在の実行場所にも存在しないため、これは同様に役に立ちません...

ただし、今、次のようなことをすると...

String folder = System.getProperty("user.home");
File[] list = new File(folder).listFiles();     
for (File file : list) {
    System.out.println(file + " - " + file.exists());
}

私は...

/path/to/home/.bash_history - true
/path/to/home/.CFUserTextEncoding - true
/path/to/home/.config - true
/path/to/home/.cups - true

これは明らかに、はるかに便利です。

覚えておかなければならないのは、Java は愚かなことStringです。そのファイルを探す場所の名前に値を指定するときに、現在の場所に基づいて仮定を行うことを認識していないことです (もちろん絶対パスを指定しない限り)。

于 2012-10-25T10:16:46.577 に答える
0

このファイルを使用して削除します (先頭に を付けないでFile.separatorください。重要なのは親フォルダーです)。

fileDelete = new File( dir, file );

そしてそれはうまくいくでしょう。dir.list(filter)パスなしのファイル名のみを返します (ディレクトリ名など)。dir現在の作業ディレクトリでない場合は、new File( file )含まれているファイルを指しませんnew File( dir, file )

于 2012-10-25T10:16:55.783 に答える
0

のファイルのリストを繰り返し処理していますが、ここからファイルを削除しようとしているわけでfolderはありません。
ところで:「31052012-TPBSDERG.cache -」は実際のファイル名ですか???

于 2012-10-25T10:17:21.517 に答える