Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск файлов по шаблону 
:(
    Опции темы
Гость_Antonio
  Дата 7.6.2005, 18:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered












Надо найти файлы по шаблону, при этом можно использовать символы * и ?. Как это зделать,
может уже есть исходники/примеры?
  Вверх
AntonSaburov
Дата 7.6.2005, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Смотрим класс File. У него есть метод list, у которого в сво. очередь есть параметр FilenameFilter.

Например можно смотреть файл, которые начинаются только с A

Код

String[] files = File.list(new FilenameFilter() {
    public boolean accept(File dir, String name)
    {
        return name.startsWith("A");
    }
};

PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 7.6.2005, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



А в чем проблема? Проходишь рекурсивно по директориям, делаешь для каждой listFiles, для каждого имени сравниваешь с шаблоном через matches(String regex) - здесь строка - это регулярное выражение в котором можно использовать *, ? и не только.
Можешь посмотреть здесь
http://www.javaworld.com/javaworld/javatip...-javatip93.html
- тут поиск прикружен к файлдиалогу, или тут
http://www.koders.com/java/fid855DD32FE2C5...27C5A1068D.aspx
Да и вообще
http://www.google.ca/search?q=file+finder+in+java


--------------------

PM   Вверх
FRIENDS
Дата 8.6.2005, 18:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Перевести для файлов легко, просто еще не доделано но идея понятная

Код


import java.io.*;
import java.lang.Character.Subset;
import java.util.*;

import com.sun.corba.se.internal.Interceptors.PICurrent;
  
public class mainainain {
 
  
  public static String normalizeFilter(String filter) {
      String temp = filter;
      int pos;
      while ((pos=temp.indexOf("?*"))!=-1) {
          temp = temp.substring(0,pos) + "*" +temp.substring(pos+2,temp.length());
      }
      while ((pos=temp.indexOf("*?"))!=-1) {
          temp = temp.substring(0,pos) + "*" +temp.substring(pos+2,temp.length());
      }
      while ((pos=temp.indexOf("**"))!=-1) {
          temp = temp.substring(0,pos) + "*" +temp.substring(pos+2,temp.length());
      }
      return temp; 
  }
    
  static boolean isCorrect(String filename,String filter){
      boolean ok = true;
      
      ArrayList AL = new ArrayList();
      StringTokenizer tok = new StringTokenizer(filter,"*");
      while (tok.hasMoreElements()) {
          AL.add(tok.nextToken());
      }
      //System.out.println("Start: " + AL);
      
      int pos = 0;
      
      for (int iterator = 0;iterator<AL.size(); iterator++) {
          String piece = AL.get(iterator).toString();
          
          if (piece.indexOf("?")!=-1) {
              String end = filename.substring(pos);
              
              if (end.length()<piece.length()) return false;
              else
              {
                  boolean status = false;
                  int count = 0;
                  for (int i=0;i<(end.length()-piece.length()+1);i++) {
                      count=0;
                      for (int k=0;k<piece.length();k++) {
//                          System.out.println("STATUS->>" + status + " END->>"+ end + " PIECE->>" + piece);
//                          System.out.println("        " + String.valueOf(end.charAt(i+k))  +  String.valueOf(piece.charAt(k)));
                          if (piece.charAt(k)=='?') count++;
                          else
                          if (end.charAt(i+k)==piece.charAt(k)) count++;
                      }
                //      System.out.println(count+" " + piece.length());
                      if (count==piece.length()) {status = true; break;}
                  }
                  if (!status) return false;
              }
              pos = pos + piece.length();
          } // if ????
          else
          if ((pos = filename.indexOf(piece,pos))!=-1) {
              pos = pos + piece.length();
          }
          else return false;
          
      }
      
      return true;
  }
  public final static void main(String []args)
  {
      String[] mas = { "book-1-100" , "book-1-101" , "book-2-100" , "book-3-100", "aaaa"};
      
      
      String filter =   "book-2-*";
      
      for (int i = 0; i < mas.length; i++) {
          System.out.println(mas[i] + " " + isCorrect(mas[i],filter));
    } 
      
  }
}




  Вверх
chups
Дата 14.5.2007, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 20.4.2007

Репутация: нет
Всего: нет



нашел подходящую тему, новою создавать не хотел.
нужно релизовать программу поиска файлов и папок на яве. я написал рекурсивную ф-цию прогулки по ФС, но она толком не работает: некоторые папки видит и сканирует их полностью, некоторые игнорирует. в чем проблемма?
исходник проги:
Код

//public package main_package;

//import input_output_package.*;
import java.awt.*;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;

/**************************************************/
public class WindowApp extends JFrame {
    //public String result = null;
    private static final long serialVersionUID = 1L;
    int count_clicked = 0;
    public WindowElements we1 = new WindowElements();
    
/***construct*************/
    public WindowApp(String s){
        super(s);
        setSize(700, 350);
        setVisible(true);
        //setResizable(false);
        Container c = getContentPane();
        c.setBackground(Color.lightGray);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//close window
        /*************distenation Panels******************************************************/
        
        we1.pn1.setLayout(new GridLayout(1, 3, 20, 20));
        we1.pn2.setLayout(new GridLayout(2, 1, 2, 2));
        we1.pn3.setLayout(new GridLayout(4, 1, 10, 2));
        we1.pn3_1.setLayout(new GridLayout(1, 2, 20, 20));
        //we1.pn3_2.setLayout(new FlowLayout());
        /*************************other operations*****************************************/
        we1.b2.setEnabled(false);
        /*************************add components*******************************************/
        we1.pn1.add(we1.b1);
        we1.pn1.add(we1.b2);
        we1.pn1.add(we1.b3);
        we1.pn2.add(we1.lb1);
        we1.pn2.add(we1.tf1);
        we1.pn3.add(we1.lb3);
        we1.pn3_1.setLayout(null);
         we1.pn3_1.add(we1.tf2);
         we1.pn3_1.add(we1.bt_for_choose);
         we1.pn3.add(we1.pn3_1);
        we1.pn3.add(we1.lb2);
        we1.pn3.add(we1.ta1);
        //we1.pn3.add(we1.jsp);разобратся!!!!!!!!!!
        //we1.ta1.setT
        /****************************add to main container***********************************/
        c.add(we1.pn1, BorderLayout.SOUTH);
        c.add(we1.pn2, BorderLayout.NORTH);
        c.add(we1.pn3);
        //c.add(we1.jsp);
        we1.bt_for_choose.setBounds(600, 10, 100, 32); 
        we1.tf2.setBounds(0, 10, 590, 30);
        repaint();
        
    }
/*********************************************************************************************/    
    public class WindowElements {
     
     JLabel lb1, lb2, lb3;
        JTextField tf1, tf2;
        JTextArea ta1;
        JScrollPane jsp;
     JButton b1, b2, b3, bt_for_choose;
        /**********************Panels************************************/
        JPanel pn1, pn2, pn3, pn3_1;
        
        /***construct*************/
        public WindowElements(){
                 b1=new JButton("поиск");
                 b2=new JButton("отмена поиска");
                 b3=new JButton("Закрыть");
                 
                 b3.setToolTipText("выйти из программы и закрыть окно");
                    bt_for_choose=new JButton("<html>выбрать, <p>где искать");/*button for choosing*/ 
                                                                             /*way for searching*/
                    pn3 = new JPanel();
                    pn3_1 = new JPanel();
                    pn2 = new JPanel();
                 pn1 = new JPanel();
                 
                 jsp = new JScrollPane(ta1, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
                 lb1 = new JLabel("Файл или папку которую ищем");
                 lb2 = new JLabel("Результаты поиска:");
                 lb3 = new JLabel("Диск или директория, где ищем:");
                 
                 
                 ta1 = new JTextArea(5, 30);
                 ta1.setEditable(false);
                 ta1.setBorder(BorderFactory.createLineBorder(Color.black, 3));
                 
                 
                 tf1 = new JTextField();
                 tf2 = new JTextField("Введите путь где искать, или выберите с помощью кнопки");
                 tf2.setToolTipText("Введите путь где искать, или выберите с помощью кнопки");
                 /**************adding ActionListener*************************************/
                 b1.addActionListener(new ActionListener(){
                     public void actionPerformed(ActionEvent e){
                         b2.setEnabled(true);
                         b1.setEnabled(false);
                         String s1 = tf1.getText();
                         String s2 = tf2.getText();
                         if(s1.equals("")){
                             JOptionPane.showMessageDialog(null, "введите что искать!");
                             b1.setEnabled(true);
                             b2.setEnabled(false);
                         }
                         else if(s2.equals("") || s2.equals("Введите путь где искать, или выберите с помощью кнопки")){
                             JOptionPane.showMessageDialog(null, "введите где искать!");
                             b1.setEnabled(true);
                             b2.setEnabled(false);
                         }
                         else{
                             //try{
                              new input_output(s1, s2);
                              //result = input_output.this.returned_method(res);
                             /*}
                             catch(NullPointerException npe){
                                 JOptionPane.showMessageDialog(null, "заданый путь указан не правильно" +
                                         " или не существует");
                                 b1.setEnabled(true);
                                 b2.setEnabled(false);
                             }*/
                         }
                     }
                 });
                 
                 b2.addActionListener(new ActionListener(){
                     public void actionPerformed(ActionEvent e){
                         b1.setEnabled(true);
                         b2.setEnabled(false);
                     }
                 });
                 
                 b3.addActionListener(new ActionListener(){
                     public void actionPerformed(ActionEvent e){
                          System.exit(0);
                     }
                 });
                 bt_for_choose.addActionListener(new ActionListener(){
                     public void actionPerformed(ActionEvent e){
                         new Common_dialog_window();
                         
                     }
                 });
                
                 tf2.addMouseListener(new MouseAdapter(){
                     public void mouseClicked(MouseEvent e){
                         if(count_clicked==0)
                         tf2.setText("");
                         count_clicked++;
                     }
                 }); 
        }
       
        
    }
/******************************************************************/
    class Common_dialog_window{
     public Common_dialog_window(){
         JFileChooser fch = new JFileChooser();
         fch.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
         fch.setMultiSelectionEnabled(false);
         int state = fch.showOpenDialog(null);
         File f = fch.getSelectedFile();
         //System.out.println(f);
         if(f!=null && state == JFileChooser.APPROVE_OPTION){
             //JOptionPane.showMessageDialog(null, f.getPath());
         we1.tf2.setText(f.getPath());
         }
        }
    }
/******************************************************************/    
   // package input_output_package;

    //import java.io.File;
    //import main_package.WindowApp;

    public class input_output {
     //int a;
         /*public void returned_method(String res){
             //WindowApp.this.we1.ta1.setText(res);
             //return res;
         }*/
     public   input_output(String s1, String main_path) {
         String str = null, result = null;
         result = walk_on_fs(main_path, str, s1);
         //returned_method(result);
         System.out.println("РЕЗУЛЬТАТ - "+result);
         
     }
     /********************************************************************************/
     public String finding_func(String one_name_of_all, String name_of_searching, String path){
         int a;
         String result = null;
         a = name_of_searching.indexOf(one_name_of_all);
         //return a;
         if (a == 0){
             result = one_name_of_all;
             we1.ta1.append("похожий(ая)файл/папка "+name_of_searching+
                     " найден в папке: "+path+"\n");
         }
         return result;
     }
     /**********************************************************************/
     public String walk_on_fs(String path, String list , String name_of_searching){
         String litlepath, result = null;    
         File f = new File(path);
         String[] list_files = f.list();
         for(int j=0;j<list_files.length; j++)
             System.out.println("список файлов и папок в папке: "+path+": " +list_files[j]);
         for (int i = 0; i < list_files.length; i++){
             litlepath=path+File.separator+list_files[i];
             File f2 = new File(litlepath);
                 
             System.out.println("вход в "+(f2.isFile()?"файл: ":"папку: ")+list_files[i]+"\n\tПуть: "+litlepath);
             if(f2.isDirectory()){
                 result = finding_func(list_files[i], name_of_searching, litlepath);
                 walk_on_fs(litlepath, list_files[i],name_of_searching);
             }
             else if(f2.isFile()) result = finding_func(list_files[i], name_of_searching, litlepath);
         }
     return result;
     }    
    }

    /********************************************************************/
    public static void main(String[] args) {
            new WindowApp("chups finder");
            
        }        
}



З.Ы. не ругайте пожалуста за неоптимизированый код, я начал учить язык недавно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0500 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.