我(相对)是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());
}
}
现在它有效!
答案 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);