Назад
Вперед
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();
На этом работа приложения завершается.
Назад Вперед |