2013-02-01 1 views
0

Pour utiliser certains fichiers d'un dossier partagé en réseau, je passe à JCIFS. Jusqu'à présent, je l'ai fait ce qui suit comme un test pour lister les fichiers dont j'ai besoin (prises de this example)Comment configurer un DosFileFilter dans JCIFS avec plusieurs extensions en tant que caractère générique?

public class ListDirectoryContent extends DosFileFilter { 

    int count = 0; 

    public ListDirectoryContent() { 
     super("*.txt", 0xFFFF); 
    } 
    public ListDirectoryContent(String wildcard, int attributes) { 
     super(wildcard, attributes); 
    } 

    public boolean accept(SmbFile file) throws SmbException { 
     System.out.print(" " + file.getName()); 
     count++; 

     return (file.getAttributes() & attributes) != 0; 
    } 

    public static void main(String[] argv) throws Exception { 

     NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("DOMAIN","myuser","A good password, yes sir!"); 
     SmbFile file = new SmbFile("smb://networkResource/sharedFolder/Files/SubFolderOne/", auth); 
     ListDirectoryContent llf = new ListDirectoryContent(); 

     long t1 = System.currentTimeMillis(); 
     SmbFile[] pepe = file.listFiles(llf); 
     long t2 = System.currentTimeMillis() - t1; 

     System.out.println(); 
     System.out.println(llf.count + " files in " + t2 + "ms"); 

     System.out.println(); 
     System.out.println(pepe.length + " SmbFiles in " + t2 + "ms"); 
    } 
} 

Et jusqu'à présent, il travaille pour un générique d'extension. Comment puis-je élargir le dosfilefilter pour vérifier un ensemble d'extensions? (comme commons.io.FileUtils fait)

Répondre

2

J'ai écrit ce SmbFilenameFilter de base pour utiliser des caractères génériques dans les noms de fichiers. J'espère que cela t'aides!

private static class WildcardFilenameFilter implements SmbFilenameFilter { 
    private static final String DEFAULT_WIDLCARD = "*"; 

    private final String wildcard = DEFAULT_WIDLCARD; 
    private final String regex; 

    public WildcardFilenameFilter(String filename) { 
     regex = createRegexPattern(filename); 
    } 

    @Override 
    public boolean accept(SmbFile dir, String name) throws SmbException { 
     return name.matches(regex); 
    } 

    private String createRegexPattern(String filename) { 
     return filename.replace(".", "\\.").replace(wildcard, ".+"); 
    } 
} 
Questions connexes