Чтение XML-файла с использованием файлового диалога в Java

Цель занятия

В этом занятии надлежит познакомиться с работой компонента файлового диалога для выбора XML-базы и загрузки ее в текстовую область для выполнения последующего поиска. Будет использована база данных, содержащая сведения о курсах валют. Поиск котировки валюты осуществляется по ее названию. Диалоговый интерфейс предполагает использование компонента JOptionPane пакета Swing. Более подробно о компонентах пакета Swing и их методах можно прочитать в [11].

Краткие теоретические сведения

Класс файлового диалога называется FiieDiaiog. Этот класс позволяет открыть окно для выбора имени файла, содержимое которого требуется прочитать или записать. Данный класс содержит методы setFiie() для установки отображаемых файлов по их расширению, getFiie() для получения имени выбранного файла и др. При запуске файлового диалога по команде show() откроется окно диалога следующего вида (рис. 2.11).

Рис. 2.11. Окно файлового диалога

В этом окне следует просто выбрать требуемый XML-файл, содержимое которого откроется в текстовой области, как показано на рис. 2.12.

Рис. 2.12. Открытие содержимого XML-файла в текстовой области

По щелчку мыши на кнопке Course появится приглашение ввести название валюты (рис. 2.13).

Рис. 2.13. Приглашение для ввода названия валюты

Для отображения окна на рис. 2.13 используется команда:

String s=JOptionPane.showInputDialog(null, "Input currency title") .toUpperCase ();

Результат работы этого диалога заключается в формировании ответа в строке s, приведенной к верхнему регистру. На основании введенного названия валюты осуществляется поиск соответствующей записи в XML-файле. Теперь по нажатию OK появится и соответствующая котировка.

Для объявления переменной типа файлового диалога используем команду private FileDialog loader.

Переменная ioader создается конструктором так:

loader=new FileDialog(this,"Browse",FileDialog.LOAD); loader.setFile("*.xml"); // Устанавливаем тип отображаемых

// файлов

Открытие диалогового файла выполняет команда loader, show (). Выбранный файл должен быть прочитан. Для этой цели вводим объявления:

File file=new File(filenamestr);

FileInputStream in=new FileInputStream(file);

DataInputStream dis= new DataInputStream(in);

Чтение файла и отображение его содержимого в текстовой области выполняется методом dispiay() таким образом:

fileArea.setText("");

String line=dis.readLine(); // Читаем строку из файла while (line !=null)

{

//Добавляем прочитанную строку в текстовую область: f ileArea.append(1ine+"\n");

// Проверяем, содержит ли строка тег <name>: if (line.indexOf("name") >=0)

{

if (line.indexOf("name") >=0)

{

// Если содержит, то переводим символы строки в верхний // регистр:

String linel=line.toUpperCase();

if (linel.indexOf(s)>=0) // Проверяем, совпало ли имя

// валюты в теге <name>

{ priz=l;} //Если совпало, то priz=l

}

line=dis.readLine(); // Считываем строку с тегом <value> if((priz==l)&&(line.indexOf("value")>=0))

{

priz=0;

JOptionPane.showMessageDialog(null,line);

} // Выводим котировку валюты

Объединим (листинг 2.17) эти сведения в единое приложение, добавив необходимые кнопки, назначение которых пояснено в комментариях.

! Листинг 2.17. Работа с диалоговым файлом

import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; import javax.swing.event.*;

public class FileDialogS extends Frame // Базовый класс

// приложения

implements ActionListener public static void main(String[] args) new FileDialogS();

public Button loadButton; // Кнопка для открытия файлового

// диалога

public Button exitButton;      //      Кнопка для выхода из приложения

public TextArea fileArea;     //      Текстовая область

//                      для вывода содержимого         файла

public Button tfPoisk; //           Кнопка для ввода названия  валюты и

// инициализации поиска котировки

private FileDialog loader; // Этот компонент используется для

// выбора файла из диалогового // окна

public String filenamestr; // Здесь помещается имя

// выбранного файла

public FileDialogS()

super("Using FileDialog"); // Вызов конструктора

// родительского класса loadButton=new Button("DisplayFile"); loadButton.addActionListener(this);

tfPoisk=new Button("Course"); // Подключение прослушивателя exitButton=new Button("Exit"); exitButton.addActionListener(this); tfPoisk.addActionListener(this);

Panel buttonPanel=new Panel(); // Создание панели

// для размещения кнопок

// Добавление кнопки на панель

buttonPanel.add(loadButton,BorderLayout.SOUTH);

// Используется компоновщик BorderLayout, располагающий // компоненты // по сторонам света

buttonPanel.add(exitButton,BorderLayout.NORTH); buttonPanel.add(tfPoisk,BorderLayout.CENTER);

// Сама панель добавляется на форму: add(buttonPanel,BorderLayout.SOUTH); fileArea=new TextArea();

// Текстовая область добавляется на форму: add(fileArea,BorderLayout.CENTER);

// Создание переменной файлового диалога: loader=new FileDialog(this,"Browse",FileDialog.LOAD);

// Установка расширений просматриваемых файлов: loader.setFile("*.xml");

setSize(350,500); // Задаем размеры формы setVisible(true); // Делаем форму видимой

}

// Обработка событий от кнопок:

public void actionPerformed(ActionEvent event)

{

if (event.getSource()==loadButton)

loader.show(); // Отображает диалоговое окно для выбора // имени файла filenamestr=loader.getFile(); // Получаем имя файла по

// getFile()

displayFile(filenamestr); // Отображает содержимое

// выбранного файла

}

else

if(event.getSource()==exitButton)

{

System.exit(0); //Завершение приложения

}

else

if(event.getSource()==tfPoisk) // Поиск котировки валюты {

String s=JOptionPane.showInputDialog(null,

"Input currency title").toUpperCase();

// команда JOptionPane.showInputDialog() отображает окно // для ввода названия валюты try {

// Выполняем поиск котировки указанной валюты // в файле filenamestr int priz=0;

File file=new File(filenamestr);

FileInputStream in=new FileInputStream(file); DataInputStream dis= new DataInputStream(in);

// Создаем потоковую переменную dis // для чтения XML-файла filenamestr f ileArea.setText("");

String line=dis.readLine(); // Читаем строку из файла while (line !=null)

f ileArea.append(1ine+"\n");

if (line.indexOf("name") >=0) // Проверяем наличие

// тега <name>

{

String linel=line.toUpperCase();

if (linel.indexOf(s)>=0) // Проверяем, совпало ли

/ / имя валюты в теге <name>

{priz=l;}

}

line=dis.readLine(); // Если да, то считываем строку // с тегом <value> if((priz==l)&&(line.indexOf("value")>=0))

{

priz=0;

JOptionPane.showMessageDialog(null,line);

} // Выводим котировку

}

}

catch(IOException oe)

{

fileArea.setText("Cannot read file "+filenamestr);}

}

}

// Этот метод выводит содержимое файла в текстовую область : public void displayFile(String filename)

{

try

{

File file=new File(filename);

FileInputStream in=new FileInputStream(file); int fileLength=(int) file.length(); byte[] fileContents =new byte[fileLength]; in.read(fileContents); // Читаем содержимое файла

// в массив байтов fileContents // Используем низкоуровневый файловый ввод:

String fileContentsString=new String(fileContents);

// Преобразуем массив байтов в строку fileArea.setText(fileContentsString); // Выводим строку

// в текстовую // область

}

catch (IOException ioe)

{

fileArea.setText("Error:"+ioe) ;

}

}

}

Здесь компонент файлового диалога объявлен как ioader: loader=new FileDialog(this,"Browse",FileDialog.LOAD); loader.setFile("*.xml");

Его запуск реализован в обработчике события, связанного с щелчком мыши на кнопке:

if (event.getSource()==loadButton)

{

loader.show();

filenamestr=loader.getFile(); displayFile(filenamestr);

}

Поиск котировки введенной валюты выполнен так:

else

if(event.getSource()==tfPoisk)

{

// Открывается диалоговое окно для ввода котировки // (рис. 2.13):

String s=JOptionPane.showInputDialog(null,"Input currency

title").toUpperCase();

try

{

int priz=0;

File file=new File(filenamestr); // Объявление потоковых

/ / переменных FileInputStream in=new FileInputStream(file); DataInputStream dis= new DataInputStream(in); f ileArea.setText("") ;

String line=dis.readLine(); // Чтение строки из файла while (line !=null)

{

fileArea.append(line+"\n"); // Добавление строки

// в текстовую область // К строке добавляется символ конца строки – \n if (line.indexOf("name") >=0) // Проверка на наличие

// в строке тега <name>

{

String linel=line.toUpperCase();

if (linel.indexOf(s)>=0) // Проверка на совпадения

// названия введенной валюты

{priz=l;}

}

line=dis.readLine() ;

if((priz==l)&&(line.indexOf("value")>=0))

{

priz=0;

JOptionPane.showMessageDialog(null,line);

} // Вывод котировки в диалоговом окне

}

Видим, что процедура поиска котировки снова считывает файл и определяет позицию строки с введенным названием валюты.

Источник: Герман О. B., Герман Ю. О., Программирование на Java и C# для студента. — СПб.: БХВ-Петербург, 2005. — 512 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100