10

私は(比較的)Javaが初めてで、Windows XPのコマンドプロンプトで次のコマンドのリストを実行する.jarを実装しようとしています。

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返します。FileString

変化: -

String pes = fList.get(i);

に: -

File pes = fList[i];

そして、に変更if (pes.contains(".lck") == true)します
if (pes.getName().contains(".lck"))

実際、 をチェックしているので、メソッドではなくメソッドextensionを使用する必要があります。はい、値を と比較する必要はありません。したがって、この条件を使用してください: -endsWithcontainsboolean==

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 に答える
0

Collectionでメソッドを使用getしていArrayます。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 に答える