Информация по теме 2. Название каждой темы располагается в отдельной строке и предваряется символом #. Наличие специального символа в строке (в данном случае — #) позволяет программе быстро найти начало раздела. Под названием темы может располагаться любая справочная информация. После окончания одного раздела и перед началом другого должна быть введена пустая строка. Кроме того, в конце строк не должно быть лишних пробелов. 3. Ниже приведен пример простого файла со справочной информацией, который можно использовать вместе с новой версией справочной системы. В нем хранятся сведения об операторах Java. if
if(condition) statement; else statement; switch
switch(expression) { case constant: statement sequence break; // ... } for
for(init; condition; iteration) statement; while
while(condition) statement; do
do { statement; } while (condition); break
break; or break label; continue
continue; or continue label; 4. Присвойте этому файлу имя helpfile.txt. 5. Создайте файл FileHelp.java. 6. Начните создание новой версии класса Help со следующих строк кода:
class Help { String helpfile; // Имя файла со справочной информацией Help(String fname) { helpfile = fname;
} 7. Имя файла со справочной информацией передается конструктору класса Help и запоминается в переменной экземпляра helpfile. А поскольку каждый экземпляр класса Help содержит отдельную копию переменной helpf ile, то каждый из них может взаимодействовать с отдельным файлом. Это дает возможность создавать отельные наборы справочных файлов на разные темы. 8. Добавьте в класс Help метод helpon , код которого приведен ниже. Этот метод извлекает справочную информацию по заданной теме.
// отобразить справочную информацию по заданной теме boolean helpon(String what) { int ch; String topic, info; // открыть справочный файл try (BufferedReader helpRdr = new BufferedReader(new FileReader(helpfile))) { do { // читать символы до тех пор, пока не встретится знак # ch = helpRdr.read; // а теперь проверить, совпадают ли темы if(ch == '#') { topic = helpRdr.readLine; if(what.compareTo(topic) == 0) { // found topic do { info = helpRdr.readLine; if(info != null) System.out.println(info); } while((info != null) && (info.compareTo("") != 0)); return true; } } } while(ch != -1); } catch(IOException exc) { System.out.println("Error accessing help file."); return false; } return false; // тема не найдена
} 9. Прежде всего обратите внимание на то, что в методе helpon обрабатываются все исключения, связанные с вводом-выводом, поэтому в заголовке метода не указано ключевое слово throws. Благодаря такому подходу упрощается разработка методов, в которых используется метод helpon . В вызывающем методе достаточно обратиться к методу helpon , не заключая его вызов в блок try/catch. 10. Для открытия файла со справочной информацией служит класс FileReader, оболочкой которого является класс Buf feredReader. В справочном файле содержится текст, и поэтому справочную систему удобнее локализовать через символьные потоки ввода-вывода. 11. Метод helpon (\ действует следующим образом. Символьная строка, содержащая название темы, передается этому методу в качестве параметра. Метод открывает сначала файл со справочной информацией. Затем в файле производится поиск, т.е. проверяется совпадение содержимого переменной what и названия темы. Напомним, что в файле заголовок темы предваряется символом #, поэтому метод сначала ищет данный символ. Если символ найден, производится сравнение следующего за ним названия темы с содержимым переменной what. Если сравниваемые строки совпадают, то отображается справочная информация по данной теме. И если заголовок темы найден, то метод helpon возвращает логическое значение true, иначе — логическое значение false. 12. В классе Help содержится также метод getSelectionO, который предлагает задать тему и возвращает строку, введенную пользователем.
// получить тему String getSelectionO { String topic = ""; BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); System.out.print("Enter topic: ") ; try { topic = br.readLine; } catch(IOException exc) { System.out.println("Error reading console."); } return topic;
} 13. В теле этого метода сначала создается объект типа Buf feredReader, который связывается с потоком вывода System, in. Затем в нем запрашивается название темы, которое принимается и далее возвращается вызывающей части программы. 14. Ниже приведен весь исходный код программы, реализующей справочную систему, находящуюся на диске.
/* Пример для опробования 10.2. Справочная система, находящаяся на диске. Для компиляции этой программы требуется JDK 7 или более поздняя версия данного комплекта.