2012-10-05 5 views
0

En utilisant un caractère générique, je veux traiter les fichiers dans un répertoire. Si un caractère générique est spécifié, je veux traiter les fichiers qui correspondent au caractère générique else sinon je traiterai tous les fichiers. Voici mon codeFiltrer les fichiers en utilisant un caractère générique (java)

List<File> fileList; 
    File folder = new File("Directory"); 
    File[] listOfFiles = folder.listFiles(); 
    if(prop.WILD_CARD!=null) { 
     Pattern wildCardPattern = Pattern.compile(".*"+prop.WILD_CARD+"(.*)?.csv",Pattern.CASE_INSENSITIVE); 
     for(File file: listOfFiles) { 
      Matcher match = wildCardPattern.matcher(file.getName()); 
      while(match.find()){ 
       String fileMatch = match.group(); 
       if(file.getName().equals(fileMatch)) { 
        fileList.add(file); // doesn't work 
       } 
      } 
     } 
    } 
    else 
     fileList = new LinkedList<File>(Arrays.asList(folder.listFiles())); 

Je ne suis pas en mesure de placer les fichiers correspondant au caractère générique dans une liste de fichiers distincte. Pls m'aide à modifier mon code afin que je puisse mettre tous les fichiers correspondant au caractère générique dans une liste de fichiers séparée. Ici, je concaténate prop.WILD_CARD dans mon expression régulière, il peut être n'importe quelle chaîne, par exemple si le caractère générique est test, mon modèle est. test (.) ?. csv. Et je veux stocker les fichiers correspondant à ce caractère générique et le stocker dans une liste de fichiers.

+0

Je suppose que votre modèle est incorrect. Vous devez montrer le modèle et le nom de fichier que vous attendez qu'il corresponde –

+0

@IngoKegel Non mon modèle est correct, cela fonctionne. prop.WILD_CARD peut être quelque chose par exemple si son test mon modèle est. * test (. *) ?. csv. Et je veux stocker les fichiers correspondant à ce caractère générique et le stocker dans une liste de fichiers –

+0

La première chose est que votre 'fileList' n'est pas initialisée. La seconde consiste à imprimer 'file.getName()' et 'fileMatch' sur la console avant de les comparer. – svz

Répondre

1

Je viens de tester ce code et il fonctionne plutôt bien. Vous devriez vérifier les erreurs logiques ailleurs.

public static void main(String[] args) { 

    String WILD_CARD = ""; 
    List<File> fileList = new LinkedList<File>(); 
     File folder = new File("d:\\"); 
     File[] listOfFiles = folder.listFiles(); 
     if(WILD_CARD!=null) { 
      Pattern wildCardPattern = Pattern.compile(".*"+WILD_CARD+"(.*)?.mpp",Pattern.CASE_INSENSITIVE); 
      for(File file: listOfFiles) { 
       Matcher match = wildCardPattern.matcher(file.getName()); 
       while(match.find()){ 
        String fileMatch = match.group(); 
        if(file.getName().equals(fileMatch)) { 
         fileList.add(file); // doesn't work 
        } 
       } 
      } 
     } 
     else 
      fileList = new LinkedList<File>(Arrays.asList(folder.listFiles())); 

     for (File f: fileList) System.out.println(f.getName()); 
} 

Ce retourne une liste de tous les fichiers * .mpp sur mon D: lecteur.

Je vous suggère également d'utiliser

 for (File file : listOfFiles) { 
      Matcher match = wildCardPattern.matcher(file.getName()); 
      if (match.matches()) { 
       fileList.add(file); 
      } 
     } 
+0

Fonctionne pour moi aussi !!! Prob est que je n'ai pas initialisé fileList au début et comme vous avez suggéré je l'ai utilisé si au lieu de while. Merci –

0

Je vous suggère de regarder dans la classe FilenameFilter et de voir si cela aide à simplifier votre code. En ce qui concerne votre expression regex, je pense que vous devez échapper au "." caractère pour que cela fonctionne.

+0

En fait, je n'ai pas de problème avec mon Regex, seule chose que je ne fais pas savoir comment mettre les fichiers correspondants dans une liste de fichiers séparée. –

Questions connexes