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

时间:2012-12-01 21:18:39

标签: java file

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

cd\
cd myfolder
del *.lck /s

我的(失败)尝试:

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

我在“get(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());
    }
}

现在它有效!

6 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:6)

fList.get(i)应为fList[i],因为fList是一个数组,它会返回File引用而不是String

更改: -

String pes = fList.get(i);

来: -

File pes = fList[i];

然后将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());
}

答案 2 :(得分:2)

最终守则有效:)

File folder = new File(dir);
                File fList[] = folder.listFiles();

                for (File f : fList) {
                    if (f.getName().endsWith(".png")) {
                        f.delete(); 
                    }}

答案 3 :(得分:1)

Java 8方法

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

答案 4 :(得分:0)

您在Collection上使用get方法Array。使用Array Index表示法如下:

        File pes = fList[i];

最好在文件名上使用endsWith() String方法:

   if (pes.getName().endsWith(".lck")){
      ...
   }

答案 5 :(得分:0)

Java 8 lambda

File folder = new File(yourDirString);
Arrays.stream(folder.listFiles())
            .filter(f -> f.getName().endsWith(".lck"))
            .forEach(File::delete);