2013-03-20 4 views
0

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

Пока у меня есть список файлов и ключевое слово.

File[] files = new File("<directory>").listFiles(); 
Scanner keyword = new Scanner("hello"); 

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

редактировать:

файлы представляют собой текстовые файлы, которые состоят только из одной линии

+0

Вот краткий пример чтения файла: http://stackoverflow.com/a/3806154/16959 –

+0

Конечно, если вы хотите, чтобы прочитать текстовое содержимое файла, посмотрите по адресу: //tika.apache.org/, это библиотека, которая может извлекать текст из Word Docs, веб-страниц (избегая HTML-тегов), PDF-файлов и т. д. –

+1

Хотя это вполне возможно сделать на Java, рассмотрели ли вы (в зависимости от ваши требования), используя один из стандартных инструментов командной строки для этого? Утилита UNIX grep делает именно то, что вам нужно, например. – codebox

ответ

3
File dir = new File("directory"); // directory = target directory. 
if(dir.exists()) // Directory exists then proceed. 
{ 
    Pattern p = Pattern.compile("keyword"); // keyword = keyword to search in files. 
    ArrayList<String> list = new ArrayList<String>(); // list of files. 

    for(File f : dir.listFiles()) 
    { 
    if(!f.isFile()) continue; 
    try 
    { 
     FileInputStream fis = new FileInputStream(f); 
     byte[] data = new byte[fis.available()]; 
     fis.read(data); 
     String text = new String(data); 
     Matcher m = p.matcher(text); 
     if(m.find()) 
     { 
     list.add(f.getName()); // add file to found-keyword list. 
     } 
     fis.close(); 
    } 
    catch(Exception e) 
    { 
     System.out.print("\n\t Error processing file : "+f.getName()); 
    } 

    } 
    System.out.print("\n\t List : "+list); // list of files containing keyword. 
} // IF directory exists then only process. 
else 
{ 
    System.out.print("\n Directory doesn't exist."); 
} 
+0

вы можете сделать это так ясно? форматирование и прочее – user2148423

+0

Байт @jsn преобразуется в строку перед поиском ключевого слова. Так что это не проблема. – VishalDevgire

+0

Нужно ли мне скачать Pattern? – user2148423

0

, если вы хотите использовать класс сканера, вот как вы можете сканировать файл по определенному ключевому слову: Сканер - это не что иное, как итератор, который просматривает предоставленные ему данные.

Scanner s = new Scanner(new File("abc.txt")); 
while(s.hasNextLine()){ 
    //read the file line by line 
String nextLine = s.nextLine(); 
      //check if the next line contains the key word 
    if(nextLine.contains("keyword")) 
    { 
       //whatever you want to do when the keyword is found in the file 
       and break after the first occurance is found 
      break; 
    } 
} 
Смежные вопросы