使用Java删除所有带扩展名的文件

6 java file

我(相对)是Java的新手,我正在尝试实现一个运行命令列表的.jar,在Windows XP的命令提示符下它将是:

cd\
cd myfolder
del *.lck /s
Run Code Online (Sandbox Code Playgroud)

我的(失败)尝试:

// Lists all files in folder
File folder = new File(dir);
File fList[] = folder.listFiles();
// Searchs .lck
for (int i = 0; i < fList.length; i++) {
    String pes = fList.get(i);
    if (pes.contains(".lck") == true) {
        // and deletes
        boolean success = (new File(fList.get(i)).delete());
    }
}
Run Code Online (Sandbox Code Playgroud)

我搞砸了"得到(i)",但我觉得我现在非常接近我的目标.

我请求你的帮助,非常感谢你!


编辑

好的!非常感谢大家.通过3个建议的修改,我最终得到:

// Lists all files in folder
File folder = new File(dir);
File fList[] = folder.listFiles();
// Searchs .lck
for (int i = 0; i < fList.length; i++) {
    String pes = fList[i];
    if (pes.endsWith(".lck")) {
        // and deletes
        boolean success = (new File(fList[i]).delete());
    }
}
Run Code Online (Sandbox Code Playgroud)

现在它有效!

tuc*_*uxi 10

for (File f : folder.listFiles()) {
    if (f.getName().endsWith(".lck")) {
        f.delete(); // may fail mysteriously - returns boolean you may want to check
    }
}
Run Code Online (Sandbox Code Playgroud)


Roh*_*ain 6

fList.get(i)fList[i]作为fList是一个数组,并且它返回一个File参考不是一个String.

变化: -

String pes = fList.get(i);
Run Code Online (Sandbox Code Playgroud)

至: -

File pes = fList[i];
Run Code Online (Sandbox Code Playgroud)

然后if (pes.contains(".lck") == true)改为
if (pes.getName().contains(".lck"))

事实上,既然你正在检查extension,你应该使用endsWith方法而不是contains方法.是的,你不需要比较你的boolean价值==.所以只要使用这个条件: -

if (pes.getName().endsWith(".lck")) {
    boolean success = (new File(fList.get(i)).delete());
}
Run Code Online (Sandbox Code Playgroud)


Joh*_*ler 5

Java 8 方法

Arrays.stream(yourDir.listFiles((f, p) -> p.endsWith("YOUR_FILE_EXTENSION"))).forEach(File::delete);    
Run Code Online (Sandbox Code Playgroud)