10

我(相对)是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());
    }
}

现在它起作用了!

4

6 回答 6

12
for (File f : folder.listFiles()) {
    if (f.getName().endsWith(".lck")) {
        f.delete(); // may fail mysteriously - returns boolean you may want to check
    }
}
于 2012-12-01T21:23:53.197 回答
7

fList.get(i)应该fList[i]fList一个数组,它返回一个File引用而不是 a 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());
}
于 2012-12-01T21:20:28.453 回答
5

Java 8 方法

Arrays.stream(yourDir.listFiles((f, p) -> p.endsWith("YOUR_FILE_EXTENSION"))).forEach(File::delete);    
于 2016-04-12T03:24:40.390 回答
3

最终代码有效:)

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

                for (File f : fList) {
                    if (f.getName().endsWith(".png")) {
                        f.delete(); 
                    }}
于 2016-04-18T12:42:26.210 回答
0

您正在使用Collection方法getArray使用Array Index如下符号:

        File pes = fList[i];

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

   if (pes.getName().endsWith(".lck")){
      ...
   }
于 2012-12-01T21:20:45.647 回答
0

Java 8 拉姆达

File folder = new File(yourDirString);
Arrays.stream(folder.listFiles())
            .filter(f -> f.getName().endsWith(".lck"))
            .forEach(File::delete);
于 2021-05-14T11:13:30.937 回答