Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Выбор файлов
Простейший редактор текста
Копирование файлов UNICODE
Сохранение объекта Java в файле
Произвольные классы и файлы
Буферизация потоков
Разбор конфигура-
ционного файла

Работа с консолью
Работа с классом PrintWriter
Разбор строк класса String
Загрузка и просмотр изображений
Потоки в оперативной памяти
Конвейерные потоки
Комбинирование двух потоков
Комбинирование нескольких потоков
Поиск слова в текстовом файле
Произвольный доступ к файлу
Информация о файле
Работа с каталогами
Просмотр содержимого каталога
Просмотр каталога с фильтром
Панель для выбора каталога
Список системных свойств
Сохранение списка системных свойств
Контрольная сумма файла
Копирование, переименование, удаление файлов
Архивы ZIP
Создание архива ZIP
Распаковка архива ZIP
Обход дерева каталогов

Назад Вперед

7.16. Поиск слова в текстовом файле

Пример демонстрирует использование классов LineNumberReader, BufferedReader и FileReader для поиска слов в текстовом файле. На консоли отображаются номера строк, где было обнаружено слово.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Немного теории

В библиотеке классов JDK версии 1.1 и более новых версий для чтения текстовых файлов предусмотрен класс FileReader. В качестве параметра конструктору этого класса вы должны передать путь к файлу, открываемому на чтение.

Запись текстовых файлов выполняется путем создания выходного потока класса FileWriter.

Для буферизации ввода и вывода вы можете создавать потоки классов BufferedReader и BufferedWriter.

Если при чтении и обработке текстового файла приложению нужно следить за номерами строк, оно может воспользоваться классом LineNumberReader. В этом классе определен метод getLineNumber, позволяющий получить номер текущей строки.

Описание примера

Наш пример представляет собой автономное консольное приложение Java. При запуске вы должны передать ему два параметра - слово для поиска и путь к текстовому файлу.

Если слово будет найдено, приложение отобразит на консоли номер соответствующей строки и саму строку, например:

Find word: PATH in file: c:\autoexec.bat
<<< 6 >>>PATH C:\W98;C:\W98\COMMAND;C:\DOS

Здесь мы искали слово PATH в файле autoexec.bat, расположенном в корневом каталоге диска C:. Слово было найдено в шестой строке.

Рассмотрим исходный текст приложения.

Сразу после запуска метод main проверяет количество параметров, указанных в командной строке. Если оно не равно двум, выводится сообщение об ошибке.

В том случае когда параметры заданы верно, на консоли отображается искомое слово и путь к файлу:

if(args.length == 2)
{
  System.out.println("Find word: " + 
    args[0] + " in file: " + args[1]);
  . . .
}

Далее метод main создает входной поток класса LineNumberReader:

try
{
  LineNumberReader lnr = 
    new LineNumberReader(
      new BufferedReader(
        new FileReader(args[1])));

Здесь используется многоступенчатая схема создания потоков. Вначале мы создаем поток класса FileReader, привязанный к файлу. Затем при помощи класса BufferedReader мы добавляем буферизацию. И, наконец, с помощью конструктора класса LineNumberReader мы создаем поток, позволяющий контролировать номер текущей обрабатываемой строки.

Чтение и обработка строк выполняется в цикле:

String s;
while(true)
{
  s = lnr.readLine();
  if(s == null)
    break;
            
  if(s.indexOf(args[0]) != -1)  
  {
    System.out.println("<<< " + 
      lnr.getLineNumber() + " >>>" + s);
  }  
}  

Очередная строка читается методом readLine, который при достижении конца входного потока возвращает значение -1.

Для поиска слова в строке мы воспользовались методом indexOf, определенным в классе String. Этот метод возвращает смещение найденного слова в строке или значение -1, если слово не найдено.

После обработки файла мы закрываем входной поток:

lnr.close();

На этом работа приложения завершается.


Назад Вперед

[Назад]