Главная страница
Навигация по странице:

  • 5.3. Сохранение текста в файле

  • 5.4. Чтение текста из файла

  • 5.5. Порядок выполнения лабораторной работы

  • 5.6. Содержание отчета

  • Лабораторная работа № 6. Обработка XML-документов Цель работы

  • 6.2. Объектная модель XML-документа

  • 6.3. Создание нового документа и запись его в XML-файл

  • 6.4. Чтение и разбор XML-файла

  • 6.5. Порядок выполнения лабораторной работы

  • Лабораторная работа № 7. Построение отчетов в PDF- и HTML- форматах

  • 7.1. Применение системы Jaspersoft для построения отчетов

  • БЖД методичка. Метод указания лаб - последняя редакция (1). Методические указания к лабораторным работам СанктПетербург Издательство спбгэту лэти 2013


    Скачать 1.15 Mb.
    НазваниеМетодические указания к лабораторным работам СанктПетербург Издательство спбгэту лэти 2013
    АнкорБЖД методичка
    Дата06.09.2021
    Размер1.15 Mb.
    Формат файлаpdf
    Имя файлаМетод указания лаб - последняя редакция (1).pdf
    ТипМетодические указания
    #229976
    страница3 из 6
    1   2   3   4   5   6
    5.2. Выбор файла для записи или чтения
    Перед началом операции записи или чтения необходимо указать имя файла. Для выбора файла рекомендуется использовать класс FileDialog, оп- ределенный в пакете java.awt. Объект FileDialog

    это модальное окно с вла- дельцем типа Frame, содержащее стандартное окно выбора файла операци- онной системы для загрузки или сохранения файла. Конструктор
    FileDialog (Frame owner, String title, int mode) создает окно загрузки или со- хранения файла. Первый аргумент указывает фрейм, в котором должно ото- бразиться окно, второй – задает текст заголовка окна, третий определяет тип окна и имеет 2 значения: FileDialog.LOAD или FileDialog.SAVE.
    Можно установить начальный каталог для поиска файла и имя файла методами setDirectory (String dir) и setFile (String fileName). Вместо конкрет- ного имени файла fileName можно написать шаблон, например *.txt (первые символы, звездочка и точка), тогда в окне будут видны только имена файлов, заканчивающиеся точкой и словом txt.
    Визуализацию окна осуществляет метод setVisible с параметром true.
    Выбранные каталог и имя файла можно получить с помощью методов класса getDirectory () и getFile, которые возвращают выбранный каталог и имя фай- ла в виде строки string. Ниже приведен код для создания диалогового окна выбора файла для сохранения данных.
    FileDialog save = new FileDialog(bookList, "Сохранение данных", FileDialog.SAVE); save.setFile("*.txt"); save.setVisible(true); // Отобразить запрос пользователю
    // Определить имя выбранного каталога и файла
    String fileName = save.getDirectory + save.getFile(); if(fileName == null) return; // Если пользователь нажал «отмена»

    30
    Аналогичным образом будет выглядеть код создания диалогового окна выбора файла для чтения данных. Эти фрагменты должны быть вставлены соответственно в обработчики кнопки «save» и кнопки «open».
    5.3. Сохранение текста в файле
    Для сохранения текста рекомендуется использовать буферизованный символьный поток записи. Если требуется сохранить табличные данные, то необходимо воспользоваться методами модели таблицы, позволяющими оп- ределить число строк и столбцов таблицы, а также извлечь значение из ячей- ки таблицы. Ниже приведен фрагмент кода по сохранению текстовых дан- ных таблицы (списка книг библиотеки) в файле: try {
    BufferedWriter writer = new BufferedWriter (new FileWriter(fileName)); for (int i = 0; i < model.getRowCount(); i++) // Для всех строк for (int j = 0; j < model.getColumnCount(); j++) // Для всех столбцов
    {writer.write ((String) model.getValueAt(i, j)); // Записать значение из ячейки writer.write("\n"); // Записать символ перевода каретки
    } writer.close();
    } catch(IOException e) // Ошибка записи в файл
    { e.printStackTrace(); }
    Следует обратить внимание, что операции с файлом должны быть за- ключены в конструкцию try-catch с указанием в качестве исключительной ситуации IOException (ошибка ввода-вывода). В обработчике ошибки ввода- вывода можно воспользоваться методом printStackTrace(), который распеча- тает стек вызова исключения в стандартный поток ошибок. Стек вызова по- казывает последовательность вызова методов, которая привела к точке воз- никновения исключения.
    5.4. Чтение текста из файла
    Для загрузки текста рекомендуется использовать буферизованный символьный поток чтения. Если данные загружаются в таблицу, то ее пред- варительно надо очистить с помощью метода модели removeRow(0). Ниже приведен фрагмент кода построчной загрузки в таблицу списка книг биб- лиотеки из файла. Этот фрагмент предполагает, что данные в файле разделе- ны символом перевода каретки (Enter):

    31 try {
    BufferedReader reader = new BufferedReader(new FileReader(fileName)); int rows = model.getRowCount(); for (int i = 0; i < rows; i++) model.removeRow(0); // Очистка таблицы
    String author; do { author = reader.readLine(); if(author != null)
    { String title = reader.readLine();
    String have = reader.readLine(); model.addRow(new String[]{author, title, have}); // Запись строки в таблицу
    }
    } while(author != null); reader.close();
    } catch (FileNotFoundException e) {e.printStackTrace();} // файл не найден catch (IOException e) {e.printStackTrace();}
    5.5. Порядок выполнения лабораторной работы
    1. Создайте новый проект, который будет дублировать проект лабораторной работы № 4.
    2. Проанализируйте разрабатываемое приложение и подготовьте в текстовом редакторе данные для его работы.
    3. Напишите и добавьте в проект обработчики кнопок загрузки текста в файл и выгрузки из него.
    4. Загрузите данные в экранную форму приложения.
    5. Внесите изменения в загруженные данные и сохраните их в файле.
    6. Просмотрите сохраненный файл и убедитесь в правильности работы приложения.
    7. Сгенерируйте документацию с помощью Javadoc и просмотрите ее в браузере.
    5.6. Содержание отчета
    Отчет по лабораторной работе должен содержать:
    1. Распечатки содержимого файлов с данными до и после внесения изменений.
    2. Скриншоты, иллюстрирующие процесс загрузки данных в файл и выгрузки из него.
    3. Текст документации, сгенерированный Javadoc.
    4. Фрагменты кода, отвечающие за сохранение и чтение данных из файла.

    32
    Лабораторная работа № 6. Обработка XML-документов
    Цель работы: знакомство с технологией обработки XML-документов и файлов.
    6.1. Понятие XML-документа
    XML (extensible Markup Language, расширяемый язык разметки)

    это утвержденный стандарт разметки документов. Под понятием «разметка» бу- дем понимать расстановку тегов в документе, предназначенную для описания структуры документа. Тег

    это общее название для конструкций в угловых скобках. Структура XML-документа представляет собой дерево, в узлах ко- торого находятся элементы. Дерево элементов порождается вложением од- них элементов в другие, которые должны быть выполнены без перекрытий.
    Элементы определяются либо парными тегами (открывающим и закрываю- щим), либо одиночным тегом. Признаком конца одиночного тега являются символы />. Текст внутри открывающего и закрывающего тегов называется содержанием (значением) элемента. Дополнительную информацию об эле- менте можно указать с помощью атрибутов, которые не рассматриваются как потомки элемента. Они указываются в открывающем или одиночном теге по- сле имени элемента как имя_атрибута="значение". Следует иметь в виду, что каких-либо правил относительно того, какую информацию задавать в виде элемента, а какую в виде атрибута

    нет. Если в элементе содержится только текст, то такой узел называется текстовым. XML-документ может содержать комментарии, которые записываются между символами .
    В общем случае XML-документ должен удовлетворять следующим синтаксическим правилам:

    документ должен начинаться с заголовка, в котором могут указы- ваться 3 атрибута: номер версии Рекомендации XML, которой должен соот- ветствовать XML-документ, вид кодировки символов документа, признак ис- пользования внешних объявлений разметки;

    в документе должен быть один элемент, включающий в себя все дру- гие элементы, который называется корнем документа, или корневым элемен- том;

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

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





    6.2. Объектная модель XML-документа
    Объектная модель документа (DOM) задает интерфейсы, которые по- зволяют программе создавать, открывать и модернизировать структуру XML- документов. Объект языка программирования, который реализует такой ин- терфейс, называется XML-парсером. В языке Java для создания DOM- парсера используются классы DocumentBuilderFactory и DocumentBuilder, определенные в пакете javax.xml.parsers. Первый класс позволяет получить парсер, порождающий дерево объектов XML-документа, а второй

    создать пустой документ или документ по указанному XML-файлу. Метод newDocumentBuilder, порождающий парсер, может вызвать исключение
    ParserConfigurationException, если по какой-либо причине парсер не может быть создан. Поэтому фрагмент кода, связанный с порождением парсера, должен быть заключен в блок try-catch, чтобы перехватить это исключение.
    Ниже представлен фрагмент кода для построения парсера и пустого документа: import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; try {
    // Создание парсера документа
    DocumentBuilder builder =
    DocumentBuilderFactory.newInstance().newDocumentBuilder();
    // Создание пустого документа
    Document doc = builder.newDocument();
    } catch (ParserConfigurationException e) { e.printStackTrace(); }

    34
    6.3. Создание нового документа и запись его в XML-файл
    Объектная модель предоставляет множество удобных классов для соз- дания XML-документов. Эти классы хранятся в пакете org.w3.dom, и в них определены виртуальные методы DOM, с помощью которых строится дерево документа. Построение дерева начинается с корневого элемента, а затем в него включаются дочерние элементы и атрибуты. Значения элементов и ат- рибутов можно задавать либо константами, либо брать из полей экранной формы или объектов приложения. После завершения построения документа его содержимое сохраняется в файле. Ниже представлен фрагмент кода, где создается структура для хранения списка книг библиотеки, а значения атри- бутов элементов берутся из полей таблицы экранной формы, модель которой описана в лабораторной работе № 2. import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.File;
    // Создание корневого элемента booklist и добавление его в документ
    Node booklist = doc.createElement("booklist"); doc.appendChild(booklist);
    // Создание дочерних элементов book и присвоение значений атрибутам for (int i = 0; i < model.getRowCount(); i++)
    {
    Element book = doc.createElement("book"); booklist.appendChild(book); book.setAttribute("author", (String)model.getValueAt(i, 0)); book.setAttribute("title", (String)model.getValueAt(i, 1)); book.setAttribute("have", (String)model.getValueAt(i, 2));
    } try {
    // Создание преобразователя документа
    Transformer trans = TransformerFactory.newInstance().newTransformer();
    // Создание файла с именем books.xml для записи документа java.io.FileWriter fw = new FileWriter(“books.xml”);
    // Запись документа в файл trans.transform(new DOMSource(doc), new StreamResult(fw));

    35
    } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
    Поскольку XML-данные являются просто текстом, их можно формати- ровать любым способом. Один из способов, который разработчики часто вы- бирают для сериализации XML-документа, заключается в его тождественном преобразовании без использования таблицы стилей. Например, для преобра- зования дерева объектов в документ, записываемый в файл, используют классы пакета javax.xml.transform. Вначале методом newlnstance создается экземпляр transFactory фабрики объектов-преобразователей, а затем с помо- щью фабрики преобразователей создается объект-преобразователь класса
    Transformer, который напрямую передает документ в файл.
    Следует обратить внимание, что необходимо заключить код создания преобразователя и запись в файл в конструкцию try-catch с указанием в ка- честве исключительных ситуаций

    TransformerConfigurationException
    (ошибка создания XML-преобразователя), TransformerException (ошибка ра- боты XML-преобразователя), IOException (ошибка ввода-вывода).
    6.4. Чтение и разбор XML-файла
    Чтобы загрузить XML-файл в объектную модель, необходимо создать парсер и с помощью него построить в памяти XML-документ и проверить его корректность. Корректность проверяется методом normalize() и заключа- ется в нормализации текстового содержимого корневого узла дерева. Норма- лизация состоит в том, что пустые текстовые узлы удаляются, а соседние текстовые узлы сливаются в один. В результате остаются только текстовые узлы, разделенные какими-либо символами разметки (тегами, комментария- ми). Нормализованная форма элементов дерева обеспечивает неизменность его структуры при сохранении и загрузке файла.
    Если документ загружен, то приложение может двигаться по структуре для обзора, поиска и отображения информации. Для этого используются сле- дующие методы библиотечного класса org.w3c.dom:

    Element root =doc.getDocumentElement() – доступ к корневому эле- менту документа;

    NodeList children = elem.getChildNodes() – получить список дочерних узлов элемента;

    36

    NodeList nl = doc.getElementsByTagName(String tagname) – получить список узлов документа с указанным именем;

    Node elem = nl.item(index) – получить узел из списка элементов по номеру;

    Element elem = doc. getElementById(String elementId) – найти элемент по значению атрибута id;

    NamedNodeMap attrs = elem.getAttributes() – получить список атрибу- тов элемента;

    String value = attrs.getNamedItem(attrName).getNodeValue() – чтение значения атрибута по его имени.
    Ниже представлен фрагмент кода, реализующий чтение данных из
    XML-файла и загрузку их в таблицу экранной формы, разработанной в лабо- раторной работе № 2: try {
    // Создание парсера документа
    DocumentBuilder dBuilder =
    DocumentBuilderFactory.newInstance().newDocumentBuilder();
    // Чтение документа из файла doc = dBuilder.parse(new File(“books.xml”));
    // Нормализация документа doc.getDocumentElement().normalize();
    } catch (ParserConfigurationException e) { e.printStackTrace(); }
    // Обработка ошибки парсера при чтении данных из XML-файла catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
    // Получение списка элементов с именем book
    NodeList nlBooks = doc.getElementsByTagName("book");
    // Цикл просмотра списка элементов и запись данных в таблицу for (int temp = 0; temp < nlBooks.getLength(); temp++) {
    // Выбор очередного элемента списка
    Node elem = nlBooks.item(temp);
    // Получение списка атрибутов элемента
    NamedNodeMap attrs = elem.getAttributes();
    // Чтение атрибутов элемента
    String author = attrs.getNamedItem("author").getNodeValue();
    String title = attrs.getNamedItem("title").getNodeValue();
    String have = attrs.getNamedItem("have").getNodeValue();
    // Запись данных в таблицу model.addRow(new String[]{author, title, have});
    }

    37
    6.5. Порядок выполнения лабораторной работы
    1. С помощью текстового редактора создайте файл, в котором будет описана структура XML-документа и данные для загрузки в экранную форму, разработанную в лабораторной работе № 5. Проверьте корректность
    XML-файла, открыв его в любом web-браузере (например, Internet Explorer или Google Chrome).
    2. Создайте новый проект, который будет дублировать проект лабораторной работы № 5.
    3. Напишите и замените в проекте обработчики кнопок загрузки данных в XML-файл и выгрузки из него.
    4. Загрузите данные в экранную форму из XML-файла. Убедитесь, что данные в экранной форме соответствуют данным XML-файла.
    5. Внесите изменения в данные экранной формы и сохраните их в
    XML-файле.
    6. Просмотрите в браузере сохраненный XML-файл и убедитесь в правильности работы приложения.
    7. Сгенерируйте документацию с помощью Javadoc и просмотрите ее в браузере.
    6.6. Содержание отчета
    Отчет по лабораторной работе должен содержать:
    1. Распечатки XML-файлов до загрузки данных в экранную форму и после их выгрузки.
    2. Скриншоты, иллюстрирующие процесс загрузки данных в XML- файл и выгрузки из него.
    3. Текст документации, сгенерированный Javadoc.
    4. Фрагменты кода, отвечающие за сохранение и чтение данных из
    XML-файла.

    38
    Лабораторная работа № 7. Построение отчетов
    в PDF- и HTML- форматах
    Цель работы: знакомство со способами формирования отчетов с использованием конструктора Jaspersoft iReport Designert.
    7.1. Применение системы Jaspersoft для построения отчетов
    JasperReports

    это Java-библиотека для создания отчетов. Библиотека представляет собой генератор отчетов, которые могут быть интегрирова- ны в Java-приложения. Библиотека позволяет отображать отчеты на экране или экспортировать их в определенный конечный формат. Поддерживаются такие форматы, как PDF, OpenOffice, DOCX и многие др. Кроме того, можно передавать результат через web-приложение или отправить итого- вый документ непосредственно на принтер. В состав Jaspersoft входит гра- фический редактор iReport. Программные продукты Jaspersoft предоставля- ются бесплатно и могут быть найдены на различных интернет-ресурсах
    (
    http://jasperforge.org/projects/ireport/
    ). В рамках данной лабораторной работы предлагается с использованием визуального конструктора iReport создать отчет, который может быть заполнен из Java-приложения и сохранен как в формате HTML, так и в формате PDF. Для начала работы с дизайнером отче- тов надо скачать инсталлятор iReport Designer и запустить его. После уста- новки дизайнера нужно проверить, подключена ли библиотека xalan.jar. Для этого надо войти в пункт меню Tools/Options и в открывшемся окне выбрать закладку Classpatch. Если библиотека xalan.jar отсутствует в списке, то доба- вить ее в список, нажав кнопку AddJAR. Эта бибиотека находится в папке ireport\libs каталога, в который был инсталлирован дизайнер.
    1   2   3   4   5   6


    написать администратору сайта