Фильтрация всех файлов из папки и ее подпапок в Java с помощью FilenameFilter

1

Я хочу, чтобы все файлы образовывали каталог, который я получил как параметр, который заканчивается на.java и имеет определенный текст в них. У меня проблемы, когда я хочу сделать это для всех ssubfolders.

Использование filenamefilter в папке возвращает файлы в папке, а не в подпапках.

Любая идея, как я могу заставить ее работать и с подпапками?

Теги:
filter

1 ответ

0

Я решил эту проблему, и я присоединяю свое решение jsut на случай, если кто-то еще столкнется с этим. Также я использовал Threads, потому что мне было проще сделать это с помощью Threads.

Идея, стоявшая за моим решением, была

  1. один поток отвечал за получение всех файлов, которые заканчиваются на ".java" [производитель]
  2. другой анализ этих файлов для получения тех, которые содержат определенный текст

Продюсер:

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

     }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню