使用FilenameFilter过滤文件夹中的所有文件及其在java中的子文件夹

时间:2014-07-03 13:56:44

标签: java filter

我想把所有文件放在一个目录中,我得到的是一个以.java结尾的参数,并且在其中有一定的文字,当我想为所有的ssubfolders做这个时,我有问题。

在文件夹上使用filenamefilter只会返回不在其子文件夹中的文件夹中的文件。

任何想法我如何才能使它在子文件夹上工作?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,我正在附加我的解决方案jsut以防其他人碰到这个。另外,我使用了Threads,因为我发现使用Threads更容易。

我的解决方案背后的理念是

  1. 一个帖子负责获取以“.java”[producer]
  2. 结尾的所有文件
  3. 另一个解析这些文件以获取包含特定文本的文件
  4. 制片人:

        public class ThreadProducator extends Thread {
           public Bufferino buffer ;
           File directory ;
           static ArrayList<File>files = new ArrayList<File>();
           public ThreadProducator(Bufferino a){
           this.buffer = a;
           directory = new File("src");
         }
    
        public static ArrayList<File> getFiles(File f){
            ArrayList<File> files1= new ArrayList<File>();
            for ( File fis : f.listFiles()){
             if ( fis.isDirectory()){
                getFiles(fis);
              }
             else{
                if(fis.getName().endsWith(".java")){
                    files.add(fis);
                    //System.out.println(files.toString());
    
    
                }
            }
           }
          return files;
         }
    
        public void run() {
            // TODO Auto-generated method stub
            if(directory.isDirectory()){
    
            ArrayList<File>files =new ThreadProducator(buffer).getFiles(directory);
        //  System.out.println(files.toString());
    
            buffer.put(files);
    
            try {
                sleep((int)Math.random()*1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
         }
        }
    
       }
    

    消费者:

       public class ThreadConsumator implements Runnable {
         private Bufferino buf;
         String lookedFor = "asdas";
    
         public ThreadConsumator(Bufferino bufi){
            this.buf = bufi;
         }
    
    
         @Override
         public void run() {
              // TODO Auto-generated method stub
              ArrayList<File> res = new ArrayList<File>();
              String content="";
              System.out.println("Files containing the word "+lookedFor+" are:");
              for ( int i = 0 ; i <25;i++){
                res = buf.get();
                for (File f : res)
                  try {
                    content = new Scanner(f).useDelimiter("\\Z").next();
    
                     if(content.contains(lookedFor)){
    
                         System.out.println(f.getName());
    
                    }
    
                   /*System.out.println("-----------------------");
                   System.out.println(content);
                   System.out.println("-----------------------");*/
                 }
                 catch (FileNotFoundException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                }
               } 
            }
    
         }
    
相关问题