2012-10-15 9 views
6

sto elenco di file utilizzando il metodo File.listFiles() in java.io.File ricevendo, ma restituisce alcuni file di sistema come (.sys e etc) .. Ho bisogno di escludere tutti i file relativi al sistema (Windows, Linux, Mac) durante la restituzione degli elenchi. Qualcuno può risolvere il mio problema?file di sistema escludendo in file.lists() in Java

+2

Come si definisce "i file di sistema"? – dmeister

+0

Non puoi filtrare tu stesso l'elenco risultante per escludere i file che non vuoi? – Bernard

risposta

2

Non penso che ci sia una soluzione generale a questo. Per cominciare, i sistemi operativi come Linux e MacOS non hanno una nozione chiara di un "file di sistema" o di un modo ovvio per distinguere un file di sistema da un file non di sistema.

Penso che la tua scommessa sia decidere cosa intendi per file di sistema e scrivere il tuo codice per filtrarli.

2

In genere il filtraggio degli elenchi di file viene effettuato utilizzando il filtro file.

new java.io.File("dir").listFiles(new FileFilter() { 
     @Override 
     public boolean accept(File pathname) { 
          // add here logic that identifies the system files and returns false for them. 

     } 
    }); 

Il problema è come si definiscono i file di sistema. Se per esempio vuoi filtrare tutti i file con l'estensione .sys è semplice. In caso contrario, si prega di definire i criteri. Se hai difficoltà ad attuare i tuoi criteri, fai una domanda specifica.

2

Come altri hanno fatto notare, alcuni sistemi operativi non hanno una definizione di "file system" .

Tuttavia, se si utilizza Java 7, v'è una nuova estensione chiamata NIO.2 che potrebbe aiutare in ambiente Windows:

Path srcFile = Paths.get("test"); 
DosFileAttributes dfa = Files.readAttributes(srcFile, DosFileAttributes.class); 
System.out.println("isSystem? " + dfa.isSystem()); 
3

mi piacerebbe implementare un semplice FileFilter con la logica per determinare, se un file è un file di sistema o no e usa un'istanza come AlexR showed in his answer. Qualcosa di simile (le regole un solo a scopo dimostrativo!):

public class IgnoreSystemFileFilter implements FileFilter { 

    Set<String> systemFileNames = new HashSet<String>(Arrays.asList("sys", "etc")); 

    @Override 
    public boolean accept(File aFile) { 

    // in my scenario: each hidden file starting with a dot is a "system file" 
    if (aFile.getName().startsWith(".") && aFile.isHidden()) { 
     return false; 
    } 

    // exclude known system files 
    if (systemFileNames.contains(aFile.getName()) { 
     return false; 
    } 

    // more rules/other rules 

    // no rule matched, so this is not a system file 
    return true; 
} 
Problemi correlati