2012-12-01 3 views
5

Ich bin (relativ) neu in Java und ich versuche, eine .jar zu implementieren, die eine Liste von Befehlen ausgeführt wird, dass Eingabeaufforderung in Windows XP Befehl wäre es:Löschen Sie alle Dateien mit einer Erweiterung mit Hilfe von Java

cd\ 
cd myfolder 
del *.lck /s 

My (nicht) Versuch:

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

schraubte ich irgendwo um dieses "get (i)", aber ich denke, dass ich jetzt mein Ziel ziemlich nahe bin.

Ich bitte um Ihre Hilfe und vielen Dank im Voraus!


EDIT

In Ordnung! Vielen Dank, alle zusammen. Mit den 3 vorgeschlagenen Änderungen endete ich mit:

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

Und jetzt funktioniert es!

+0

Es gibt keine 'get' Methode eines Arrays, was bedeutet, dass' fList.get (i) 'nicht kompiliert wird. Um stattdessen auf das Objekt "i" in einem Array zuzugreifen, führen Sie 'fList [i]' aus. – Vulcan

+1

könnte besser sein ändern pes.contains (". Lck") mit pes.endsWith (". Lck") –

+0

Sie sollten auch ['endsWith (...)'] (http://docs.oracle.com/ javase/6/docs/api/java/lang/String.html # endsWith (java.lang.String)) anstelle von ['enthält (...) '] (http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#contains (java.lang.CharSequence)), außer du möchtest Dinge wie * myfile.lck. exe * muss ebenfalls gelöscht werden. –

Antwort

6

fList.get(i) sollte fList[i] als fList ein Array ist, und es gibt eine File Referenz kein String.

Wechsel: -

String pes = fList.get(i); 

zu: -

File pes = fList[i]; 

Und dann if (pes.contains(".lck") == true) ändern
if (pes.getName().contains(".lck"))

In der Tat, da Sie für die extension werden überprüft, sollten Sie verwenden endsWith Methode statt contains Methode. Und ja, Sie müssen Ihren boolean Wert nicht mit == vergleichen. So einfach diese Bedingung verwenden: -

if (pes.getName().endsWith(".lck")) { 
    boolean success = (new File(fList.get(i)).delete()); 
} 
0

Sie verwenden Collection Methode get auf einem Array. Verwenden Sie Array Index Notation wie folgt:

 File pes = fList[i]; 

auch besser endsWith() String-Methode über die Dateinamen zu verwenden, wie:

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

Java 8 Ansatz

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

finalen Code, das funktioniert :)

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

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