18085

Программирование ввода-вывода в Java

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа 8 Программирование вводавывода в Java 1. Цель работы Целью работы является приобретение навыков использования потоков вводавывода в программах на языке Java. 2. Состав рабочего места 2.1. Оборудование: IBMсовместимый персональный компьютер...

Русский

2013-07-06

276.5 KB

26 чел.

Лабораторная работа 8

Программирование ввода-вывода в Java

1. Цель работы

Целью работы является приобретение навыков использования потоков ввода-вывода в программах на языке Java.  

  

2. Состав рабочего места

2.1. Оборудование: IBM-совместимый   персональный компьютер (ПК).

2.2. Программное обеспечение: операционная система Windows, Java 2 SDK версии 6.0 и выше, пакет NetBeans IDE 6.1.

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

3.1. Работа с файлами в Java

Информация на устройствах внешней памяти хранится в файлах – именованных областях на диске, дискете или другом машинном носителе. Структура (как правило, иерархическая) размещения файлов на носителях информации, а также виды и правила задания атрибутов файла (имени, типа, даты создания и/или модификации и т.п.) называется файловой системой. Файловые системы в разных операционных системах, как правило, отличаются  друг от друга.

3.1.1. Класс File

Класс File позволяет получить от системы все данные, начиная с имени файла и заканчивая временем последней его модификации. Класс File можно использовать для создания новых каталогов, а также для удаления и переименования файлов. Для создания объекта File нужно вызвать один из трех конструкторов класса:

File(String path)

File(String path, String name)

File(File dir, String name)

Первый конструктор создает объект File с указанным полным именем файла. Второй конструктор создает этот объект, используя отдельно путь и имя файла, а третий создает объект, используя путь и имя файла, при этом путь определяется другим объектом File.

Методы для работы с файлами и каталогами класса File приведены в табл. 3.5.1.

Таблица 3.5.1.  Методы для работы с файлами и каталогами класса File

Метод

Описание

public String getName()

Определяет имя файла.

public String getPath()

Определяет относительный путь к файлу (например из данного каталога).

public String getAbsolutePath()

Определяет полное имя файла (путь к каталогу из корневого каталога). Этот путь называется также абсолютным путем к файлу.

public String getParent()

Определяет родительский каталог файла.

public boolean exists()

Возвращает значение true, если файл существует.

public boolean canWrite()

Возвращает значение true, если в файл можно записывать.

public boolean canRead()

Возвращает значение true, если файл можно читать.

public boolean isFile()

Возвращает значение true, если файл.

public boolean isDirectory()

Возвращает значение true, если каталог.

public boolean isAbsolute()

Возвращает значение true, если имя файла полное.

public long lastModified()

Возвращает время последней модификации файла.

public long length()

Возвращает длину файла.

public boolean mkdir()

Создает каталог.

public boolean renameTo(File newName)

Переименовывает файл.

public boolean delete()

Удаляет файл.

public boolean mkdirs()

Создает дерево каталогов..

public String[] list()

Создает строковый массив имен файлов и подкаталогов в каталоге.

public String[] list(FilenameFilter filter)

Создает строковый массив имен всех файлов, удовлетворяющих фильтру имен по интерфейсу FilenameFilter.

public File[] listFiles()

Создает массив объектов класса File в каталоге.

public File[] listFiles(FilenameFilter filter)

Создает массив объектов класса File, удовлетворяющих фильтру имен по интерфейсу FilenameFilter.

public File[] listFiles(FileFilter filter)

Создает строковый массив объектов класса File, удовлетворяющих фильтру имен по интерфейсу FileFilter.

Часто требуется ограничить количество файлов, возвращаемых методами list() или listFiles(), чтобы включать в список только те из них, имена которых соответствуют некоторому образцу или фильтру. Для этого этой цели можно использовать перегруженную форму методов list() и listFiles():

public String[] list(FilenameFilter filter)

public File[] listFiles(FilenameFilter filter)

В этих формах в качестве параметра задается объект класса, который реализует интерфейс типа FilenameFilter.

Интерфейс FilenameFilter определяет единственный метод accept(), который имеет следующий вид:

public abstract boolean accept(File dir, String name)

Этот метод возвращает true для файлов каталога dir, которые должны быть включены в отфильтрованный список (с именами name), и возвращает false для тех файлов, которые должны быть исключены из списка (имена которых не совпадают с name).

При использовании метода  

public File[] listFiles(FileFilter filter)

файлы фильтруется не просто по именам, а по их полным именам (с путями в иерархии каталогов).

При этом возвращаются файлы с теми именами пути, которые удовлетворяют файловому фильтру filter. Интерфейс FileFilter определяет только один метод, accept(), который вызывается однажды для каждого файла в списке. Его общая форма:

boolean accept(File path)

Метод возвращает true для файлов, которые должны быть включены в список (т.е. тех файлов, которые указаны в path), и false – для  тех файлов, которые должны быть исключены (не указаны в path).

Переменная 

public final static char separatorChar

класса File возвращает символ разделения имен каталогов и файлов ("\" в Windows и "/" – в Unix), а переменная

public final static char pathSeparatorChar  

содержит символ-разделитель путей в списке (";" в Windows и ":" – в Unix).

3.1.2. Выбор файлов в Swing

Класс JFileChooser в Swing обеспечивает диалоговое окно для выбора каталогов и файлов. Основные конструкторы этого класса:

JFileChooser()

JFileChooser(File currentDirectory)

JFileChooser(String currentDirectoryPath)

позволяют открыть окно выбора файлов как для всех файлов, так и для конкретного каталога.

Методы класса JFileChooser приведены в табл. 3.5.2.

Таблица 3.5.2.  Методы класса JFileChooser

Метод

Описание

public File getSelectedFile()

Получение выбранного файла.

public File[] getSelectedFiles() 

Получение выбранных файлов.

public void setSelectedFile(File file)

Установка выбранного файла.

public void setSelectedFiles(File[] selectedFiles))

Установка выбранных файлов.

public File getCurrentDirectory()

Получить выбранный каталог.

public void setCurrentDirectory(File dir)

Установить выбранный каталог.

public String getDescription(File f)

Получение характеристик файла.

public void setFileFilter(FileFilter filter)

Установка фильтра для имен выводимых файлов.

public FileFilter getFileFilter()

Получение фильтра для имен выводимых файлов.

public void setAcceptAllFileFilterUsed(boolean b)

Определяет будет ли установлен фильтр для вывода всех файлов.

public void addChoosableFileFilter(FileFilter 

filter)

Добавление пользовательского фильтра выбора.

public void setApproveButtonText(String 

approveButtonText)

Замена надписи на кнопке "Открыть" (Open).

public void setApproveButtonToolTipText(String 

toolTipText)

Задание текста  подсказки для кнопки "Открыть" (Open).

public void setDialogType(int dialogType)

Задание типа пользовательского диалога.

public void setMultiSelectionEnabled(boolean b)

Включение/выключение возможности множественного выбора.

Для отслеживания событий, связанных с кнопками в диалоговом окне выбора файлов, необходимо реализовать интерфейс и добавить или удалить блок прослушивания для кнопок диалогового окна выбора файлов с помощью методов

public void addActionListener(ActionListener l)

и

public void removeActionListener(ActionListener l)

класса JFileChooser.

3.2. Организация ввода-вывода в Java 

Все данные в компьютерной системе проходят от устройств ввода через компьютер к устройствам вывода. Аналогия с перетекающими данными вызвала к жизни термин «потоки» (streams). Два термина в Java, означающие разные понятия: thread и stream, переводятся на русский язык одним и тем же словом – поток. Чтобы избежать путаницы, в этом занятии мы будем использовать для первого термина слова «поток вычислений», а для второго – просто «поток».    

Потоком называется канал обмена информацией между ее источником и получателем. На одном конце потока всегда находится программа на Java. Если она будет служить источником данных, то данный поток будет выходным, если программа будет находиться на принимающей стороне – то входным.

Начиная с версии JDK 1.1, в Java определены два типа потока: байтовый и символьный потоки.

Байтовый поток  или оперирует с байтами и используется при чтении (input stream) или записи (output stream) данных в двоичном коде.

Символьный поток (reader или writer) используется для ввода и вывода символов.  В более старых языках, например C или C++, понятие символ и байт являются эквивалентными, поскольку символы имели однобайтовую кодировку.  Однако в Java символ не является эквивалентом байта, так как представляет собой 16-битовый элемент, предназначенный для размещения кодов Unicode.

В языке Java потоки представляются классами. Простейшие из этих классов работают с базовыми потоками ввода и вывода, имеющими основные средства работы с потоками. От базовых классов порождаются другие классы, в большей степени ориентированные на конкретный тип ввода или вывода.

Все классы ввода-вывода Java описаны в пакете java.io.

Следует заметить, что практически каждый метод любого класса в пакете java.io способен генерировать ту или иную форму исключительной ситуации IOException. Поэтому для улучшения стиля программирования следует всегда помещать вызовы операций ввода-вывода в блоки try и catch.

3.3. Байтовые потоки ввода-вывода

3.3.1. Классы InputStream и OutputStream

Абстрактный класс InputStream представляет собой базовый поток ввода. Класс содержит единственный конструктор

InputStream().

Методы класса InputStream приведены в табл. 3.5.3.

Таблица 3.5.3.  Методы класса InputStream

Метод

Описание

public int read()

throws IOException

Считывает из входного потока отдельные байты как целые числа, возвращая значение -1, когда больше нечего читать.

public int read(byte b[]) throws IOException

Считывает множество байтов в байтовый массив, возвращая количество реально введенных байтов.

public int read(byte b[], int off, int len) throws IOException

Также читает данные в байтовый массив, однако позволяет указать смещение (off) в массиве, с которого начнется запись символов, а также задать максимальное число считываемых байтов (len).

public long skip(long n) throws IOException

Пропускает байты в потоке.

public int available() throws IOException

Возвращает количество байтов, имеющихся в данный момент в потоке.

public void mark(int readlimit)

Помечает позицию readlimit в потоке.

void reset() throws IOException

Возвращается к отмеченной позиции потока.

public boolean markSupported()

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

public void close() throws IOException

Закрывает поток.

Абстрактный класс OutputStream, обеспечивает базовые функции для всех выходных потоков и имеет единственный конструктор

OutputStream().

Методы класса OutputStream приведены в табл. 3.5.4.

Таблица 3.5.4. Методы класса OutputStream

Метод

Описание

public void write(int b) throws IOException

Записывает байт в поток.

public void write(byte b[]) throws IOException

Записывает в поток все байты, содержащиеся в заданном байтовом массиве.

public void write(byte b[], int off, int len) throws IOException

Записывает данные из байтового массива, указывая начальное смещение (off) и количество выводимых байтов (len).

public void flush() throws IOException

Выполняет принудительную запись всех буферизированных выходных данных.

public void close() throws IOException

Закрывает поток.

3.3.2. Классы FileInputStream и FileOutputStream  

Класс FileInputStream создает (открывает) объект, который можно использовать для чтения байтов из файла с помощью одного из следующих конструкторов:

FileInputStream (String filepath)

throws FileNotFoundException

FileInputSream(File file) throws FileNotFoundException

Класс FileInputStream реализует методы available(), close(), skip() и все формы метода read(). Кроме того, в этом классе добавлен  метод 

public final FileDescriptor getFD() throws IOException,

возвращающий объект FileDescriptor для открытого файла и метод

protected void finalize() throws IOException 

для очистки связи с файлом и вызова метода close().

Класс FileOutputStream создает объект OutputStream, который можно применять для записи байтов в файл. Обычно используются следующие конструкторы этого класса:

FileOutputStream(String filePath)

FileOutputStream(File fileObj)

FileOutputStream(String filePath, boolean append)

Параметры в этих конструкторах имеют тот же смысл, что и в конструкторах класса FileInputStream. Если параметр  append в последнем конструкторе равен  true, файл (если он уже существует) открывается в режиме добавления, иначе файл записывается заново.

Класс FileOutputStream  реализует метод close() и все формы метода  write() класса OutputStream, а также использует свои собственные методы getFD() и finalize(), аналогичные одноименным методам класса FileInputStream.

3.3.3. Классы ByteArrayInputStream и ByteArrayOutputStream

Класс ByteArrayInputStream является реализацией входного потока, которая использует байтовый массив как источник. Этот класс имеет два конструктора, каждый из которых использует байтовый массив в качестве источника данных:

ByteArrayInputStream(byte array[])

ByteArrayInputStream (byte array [], int off, int len)

Здесь байтовый массив array – это источник ввода. Второй конструктор создает объект, состоящий из байтового массива, который начинается с позиции off и имеет длину len байтов.

Класс ByteArrayInputStream реализует методы read() класса InputStream для чтения оного байта и части массива. Реализация метода reset() в этом классе имеет следующую особенность: если метод mark() не вызвался, то reset() устанавливает поточный указатель на начало потока, который в этом случае является началом массива байт, передаваемого конструктору. Эту особенность можно использовать, например, для чтения одного и того же потока ввода дважды.

При выполнении операции вывода массив байтов можно переслать в локальную память компьютера. Конкретным классом выводного потока OutputStream, способным решить эту задачу, является ByteArrayOutputStream.

Класс ByteArrayOutputStream имеет следующие два конструктора:

ByteArrayOutputStream()

ByteArrayOutputStream(int len)

Первому из них не передается никаких параметров, поэтому он создает буфер размером 32 байт. При необходимости размер буфера может быть увеличен. Однако если увеличение будет выполняться на несколько байтов за каждое обращение, то в некоторых системах это может вызвать сильную фрагментацию памяти. Если заранее известно, что потребуется буфер размером, например, в 1024 байта, следует использовать вторую версию конструктора, которому передается один параметр.

В дополнение к методам, унаследованным от базового класса OutputStream, класс ByteArrayOutputStream поддерживает методы, представленные в табл. 3.5.5.

Таблица 3.5.5. Методы класса ByteArrayOutputStream

Метод

Описание

public int size()

Возвращает текущий размер буфера.

public void reset()

Сбрасывает значение счетчика выводного потока в 0, так, что уже накопленное содержимое буфера выводного потока теряется.  

public byte[] toByteArray()

Преобразует данные выводного потока в новый массив байтов.

public String toString()

Преобразует содержимое буфера в строку в соответствии с правилами кодирования символов по умолчанию.

public void writeTo(OutputStream out) throws IOException

Записывает  все содержимое потока в другой поток.

Класс ByteArrayOutputStream можно использовать как один из элементов для построения более сложных объектов, включая процедуры взаимодействия между процессами, или для замены других потоков (например, потока сетевых данных) в процессе тестирования.

3.3.4. Класс SequenceInputStream

Класс SequenceInputStream позволяет сцеплять множество объектов входного потока. Основная форма конструктора этого класса использует в качестве параметров два объекта класса InputStream или его подклассов:

SequenceInputStream(InputStream firstStream,

InputStream secondStream)

Класс выполняет запросы чтения первого объекта типа InputStream (параметр firstStream), пока он не закончится, и затем переключается на второй (параметр secondStream).  В свою очередь, используя в качестве одного из объектов объект класса SequenceInputStream, можно организовать ввод более чем двух объектов входного потока.

Класс SequenceInputStream реализует методы available() и close(), а также методы read() для чтения байта и части массива класса InputStream.

3.3.5. Классы BufferedInputStream и BufferedOutputStream

Байтовый буферизированный поток расширяет классы  фильтрованного потока, присоединяя буфер памяти к потокам ввода/вывода. Такой буфер позволяет выполнять операции ввода-вывода (используя внутренний буфер) не с одним, а с несколькими байтами одновременно, и, следовательно, увеличивает эффективность работы программы. При наличии буфера становится возможным такие операции, как пропуск байтов, маркировка и переустановка потока. Буферизированные поточные классы –  это классы  BufferedInputStream и BufferedOutputStream.

Класс BufferedInputStream содержит два конструктора:

BufferedInputStream (InputStream in)

BufferedInputStream(InputStream in, int size)

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

protected byte[] buf 

класса BufferedInputStream содержит внутренний буфер входного потока, а переменная

protected int count 

содержит счетчик количества введенных байт (эта величина меняется от нуля до величины массива size).

Класс BufferedInputStream поддерживает все методы класса InputStream, за исключением метода read() для чтения массива байт.

Класс BufferedOutputStream является эффективным вариантом класса OutputStream, выполняющим запись байтов во внутренний буфер, который затем может быть выведен в поток нижнего уровня. Конструкторы этого класса 

BufferedOutputStream(OutputStream out)

BufferedOutputStream(OutputStream out, int size)

создают объект BufferedOutputStream с буфером по умолчанию (512 байт) или с буфером заданного размера.

Свойство этого класса

protected byte[] buf 

возвращает содержимое внутреннего буфера, а свойство

protected int count 

– количество выведенных в буфер  байт. Класс BufferedOutputStream реализует методы write()записи одного байта и части массива байт, а также методы  close() и flush() класса OutputStream.

3.3.6. Класс PushbackInputStream

Одно из  применений буферизации – выполнение возврата считанного байта обратно во входной поток (операция pushback). Эту возможность в Java осуществляет класс PushbackInputStream. Этот   класс имеет следующие конструкторы:

PushbackInputStream (InputStream inputStream)

PushbackInputStream( InputStream inputStream, int size)

Первая форма создает поточный объект, который позволяет возвратить один байт во входной поток. Вторая форма создает поток, который имеет специальный pushback-буфер длиной size байт. Он дает возможность выполнять  возврат нескольких байтов во входной поток.

Кроме методов available(), close(), markSupported(), read() и read() для чтения части массива байт класса InputStream, в PushbackInputStream определен метод unread() в следующих формах:

void unread(int b)

void unread(byte b[])

void unread(byte b [], int off, int len)

Первая форма возвращает младший байт параметра b. Возвращенный байт будет прочитан следующим за unread() вызовом read(). Вторая форма возвращает группу байтов — весь буферный массив b[]. Третья форма обеспечивает получение части массива b[] (len байт, начиная с индекса off). Если осуществляется попытка возвратить байт при заполненном буфере возврата, будет брошено исключение класса IOException.

3.3.7. Класс PrintStream

Класс PrintStream позволяет вывести в поток нижнего уровня представление данных примитивного, строкового или объектного типа, которое они будут иметь при печати.

Два конструктора класса PrintStream:

PrintStream(OutputStream out)

PrintStream(OutputStream out, boolean autoFlush)

создают новый поток для печати. Если второй параметр во втором конструкторе равен true, то выводной буфер будет очищаться в одной из следующих ситуаций: записан массив байт, вызван один из методов println() или в выводной поток записывается символ "\n".

Помимо реализации методов write() записи массива байт и части массива байт, а также методов   flush() и close() класса OutputStream, в классе PrintStream определены также следующие методы:

  •  protected void setError() – установка состояние ошибки для потока в true;
  •  public boolean checkError() – очистка буфера потока с проверкой его состояния ошибки.

Кроме этого, в классе определены два уже известных метода:    

public void print(аргумент) 

и 

public void println(аргумент).  

В качестве аргументов при вызове этих методов могут быть заданы: boolean b, char c, char[] s, float f, double d, int i, long l, String s и Object obj.  

3.4. Символьные потоки ввода-вывода

3.4.1. Классы Reader и Writer

Функции классов InputStream и OutputStream для символьных потоков выполняют абстрактные классы Reader и Writer.

Класс Reader  определяет модель символьного входного потока. Конструкторы класса 

protected Reader()

protected Reader(Object lock)

определяют новый вводной символьный поток. Критические секции потока в первом конструкторе синхронизируются с самим вводном потоке, а во втором – с указанным объектом lock.

Краткое описание методов класса Reader приведено в табл. 3.5.6.

Таблица 3.5.6. Методы класса Reader

Метод

Описание

public int read()

throws IOException

Считывает из входного потока отдельные символы как целые числа, возвращая значение -1, когда больше нечего читать.

public int read(char с[]) throws IOException

Считывает множество символов в символьный массив, возвращая количество реально введенных символов.

public int read(char с[], int off, int len) throws IOException

Также читает данные в символьный массив, однако позволяет указать смещение (off) в массиве, с которого начнется запись символов, а также задать максимальное число считываемых символов (len).

public long skip(long n) throws IOException

Пропускает символы в потоке.

public boolean ready() throws IOException

Возвращает true, если поток готов к чтению, и false – в противном случае.  

public void mark(int readlimit)

Помечает позицию readlimit в потоке.

public boolean markSupported()

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

void reset() throws IOException

Возвращается к отмеченной позиции потока.

public void close() throws IOException

Закрывает поток.

Класс Writer определяет модель поточного символьного вывода. Конструкторы класса

protected Writer()

protected Writer (Object lock)

определяют новый выводной символьный поток аналогично конструкторам класса Reader.

Методы класса Writer представлены в табл. 3.5.7.

Таблица 3.5.7. Методы класса Writer

Метод

Описание

public void write(int с) throws IOException

Записывает символ в выходной поток.

public void write(char с[]) throws IOException

Записывает в выходной поток все символы, содержащиеся в заданном символьном массиве.

public void write(char с[], int off, int len) throws IOException

Записывает данные из символьного массива, указывая начальное смещение (off) и количество выводимых символов (len).

public void write(String str) throws IOException

Записывает строку в выходной поток.

public void write(String str, int off, int len) throws IOException

Записывает данные из строки, указывая начальное смещение (off) и количество выводимых символов (len) строки.

public void flush() throws IOException

Выполняет принудительную запись всех буферизированных выходных данных.

public void close() throws IOException

Закрывает выходной поток.

3.4.2. Классы InputStreamReader и OutputStreamWriter

Классы InputStreamReader  и  OutputStreamWriter являются переходниками между байтовыми и символьными потоками.

Класс InputStreamReader  преобразует байтовый поток в символьный поток. Основной конструктор этого класса:

InputStreamReader(InputStream in)

Этот конструктор создает из байтового потока in символьный поток в соответствии с кодировкой по умолчанию (кодировка по умолчанию зависит от реализации виртуальной машины Java и установленных для нее локальных значений).

Для класса InputStreamReader  определены следующие методы read() для чтения одного символа или части массива символов, методы ready() и  close() класса  Reader.

Класс OutputStreamWriter преобразует символьный поток в байтовый поток. Основной конструктор этого класса:

OutputStreamWriter(OutputStream out)

Этот конструктор создает из символьного потока out байтовый поток в соответствии с кодировкой по умолчанию.  

Для вывода символов в классе OutputStreamWriter используются первые три формы метода write(), метод flush() и метод close() класса Writer.       

3.4.3. Классы FileReader и FileWriter 

Класс FileReader создает объект, который можно использовать для чтения содержимого файла. Для создания объекта класса FileReader можно использовать один из следующих конструкторов:

FileReader(String fileName) throws FileNotFoundException

FileReader(File file) throws FileNotFoundException

В первом конструкторе в качестве параметра задается полное имя файла, а во втором – объект класса File .

Класс FileReader наследует методы read() для чтения символа и части массива символов, close() и ready() класса InputStreamReader, а также метод read() для чтения массива символов, mark(), markSupported(), reset() и skip() класса Reader.

Класс FileWriter создает объект, который можно использовать для записи в файл. Конструкторы этого класса:

FileWriter(String fileName) throws IOException

FileWriter(File file) throws IOException

FileWriter(String fileName, boolean append)

throws IOException

задают в параметрах либо полное имя файла (параметр fileName), либо объект класса File (параметр file). Второй параметр  append последнего конструктора задает режим записи в файл: если true, то вывод добавляется в конец файла, если false – файл перезаписывается.

При создании объекта класса FileWriter, если файл существует, он открывается, если файл не существует, он будет создан и открыт.

Класс FileWriter наследует первые три формы метода write(), метод flush() и метод close() класса OutputStreamWriter.

3.4.4. Классы CharArrayReader и CharArrayWriter

Класс CharArrayReader является реализацией входного потока, которая использует символьный массив как источник. Для этого класса определены следующие  конструкторы:

CharArrayReader(char с[ ])

CharArrayReader(char с[ ], int off, int len)

Первый конструктор создает из массива символов c входной поток, а второй конструктор читает len символов массива c, начиная со смещения off.

Класс реализует следующие методы класса Reader: skip(), ready(), reset(), mark(), markSupported(), close(), а также методы read() для чтения одного символа и части массива символов.

Класс CharArrayWriter реализует  выходной поток, записывающий данные в символьный массив. Этот класс имеет два конструктора:

CharArrayWriter()

CharArrayWriter (int initialSize)

В первой форме создается буфер с размером, заданным по умолчанию. Во второй форме –  буфер с размером, указанным в параметре initialSize. Буфер содержится в поле buf класса CharArrayWriter. Если необходимо, размер буфера будет увеличен автоматически. Число символов, хранящихся в буфере, содержится в поле count класса CharArrayWriter. И  buf  и count объявлены с модификатором protected, т.е. являются защищенными полями.

Наряду с реализацией методов write() для записи одного символа, части массива символов и части строки,  flush() и close() класса Writer, в классе CharArrayWriter реализованы собственные методы, представленные в табл. 3.5.8.

Таблица 3.5.8. Методы класса CharArrayWriter

Метод

Описание

public char[] toCharArray()

Возвращает копию вводимых данных.

public String toString()

Преобразует вводимые данные в строку.

public int size()

Возвращает текущий размер буфера.

public void writeTo(Writer out) throws IOException

Записывает содержимое буфера в другой символьный поток.

3.4.5. Класс PrintWriter

Класс PrintWriter выводит форматированное представление объектов в текстовый выводной поток.

Для класса PrintWriter определены следующие конструкторы:

PrintWriter(OutputStream out)

PrintWriter(OutputStream out, boolean autoFlush)

PrintWriter(Writer out)

PrintWriter(Writer out, boolean autoFlush)

Первый и второй конструкторы создают новый объект PrintWriter из существующего выводного байтового потока out, третий и четвертый конструкторы создают новый объект PrintWriter из существующего выводного символьного потока out (при этом создается промежуточный объект OutputStreamWriter, преобразующий символы в байты с использованием кодирования символов по умолчанию). Первый и третий конструкторы  выводят символы в выходной поток без автоматического освобождения буфера при переходе на новую строку. Задание для autoFlush значения true во втором и четвертом конструкторах вызывает очистку буферов при использовании методов println().

Методы этого класса не бросают исключения ввода-вывода. Вместо них используются методы данного класса

protected void setError()

и 

public boolean checkError()

соответственно устанавливающий состояние ошибки в true и проверяющий состояние ошибки.

Методы print() и println() класса PrintWriter имеют те же аргументы, что и соответствующие методы класса PrintStream, и действуют аналогично.  

Кроме того, для класса PrintWriter определены все методы класса Writer.   

3.5. Консольный ввод

Вводить данные с клавиатуры, не создавая собственных потоков можно с помощью объекта System.in, являющегося экземпляром класса InputStream. Поскольку объект является экземпляром класса, ему доступны все методы этого класса.  

Признаком окончания ввода с клавиатуры может служить ввод заданного символа или последовательности символов, а также нажатие клавиш Ctrl+Z.

Хотя можно обрабатывать входной поток с клавиатуры как байтовый, в Java 2 рекомендуется преобразовать вводимый байтовый поток в символьный, используя объект класса  InputStreamReader, а затем преобразовать его в буферный ввод с использованием класса BufferedReader.

3.6. Класс StreamTokenizer

При чтении символьных потоков очень часто требуется разбивать данные на отдельные слова. Слово – это последовательность   символов, отделенная от других слов пробелом или некоторым символом-разделителем. Для решения подобной задачи в Java существует специальный класс StreamTokenizer, конструктору которого в качестве параметра передается ссылка на входной символьный поток.

Свойства этого класса определяют следующие типы слов:

  •  TT_EOF – конец файла;
  •  TT_EOL – конец строки;
  •  TT_NUMBER – число;
  •  TT_WORD – текстовое поле.

Кроме, того, свойство

int nval

содержит значение текущего слова, если оно число, а свойство

String sval  

содержит значение текущего слова, если оно – строка. Свойство

int ttype 

содержит тип только что прочитанного слова.  

Класс StreamTokenizer включает множество различных методов, основные из которых приведены в табл. 3.5.9.

Таблица 3.5.9. Основные методы класса StreamTokenizer

Метод

Описание

void commentChar (int char)

Определяет символ однострочного комментария.

void eolIsSignificant(boolean flag)

Позволяет указать, следует ли считать признак конца строки разделителем слов (если да, то flagtrue, иначе – false).

int lineno()

Возвращает номер текущей строки.

void lowerCaseMode(boolean flag)

Позволяет перевести экземпляр объекта в режим принудительного перевода всех выделенных слов в нижний регистр.

int nextToken()

Читает следующее слово и возвращает его тип. Кроме того, тип слова устанавливается в ttype.

void ordinaryChar()

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

void ordinaryChars(int low, int high)

Устанавливает, что символы с кодами в диапазоне от low до high являются простыми.

void parseNumbers()

Позволяет определить, следует ли предпринимать попытки распознавания чисел и преобразования их в соответствующую числовую форму.

void pushBack()

Вынуждает класс при следующем вызове метода nextToken() осуществить возврат последнего выделенного слова обратно во входной поток.

void quoteChar(int char)

Определяет символ, используемый для выделения текстовых строк.

void resetSyntax()

После вызова этого метода данный экземпляр объекта будет использовать синтаксическую таблицу, принимаемую по умолчанию, в которой все символы являются "простыми".

void slashSlashComments(boolean flag)

Задает режим обработки однострочных комментариев, выполненных в стиле C++.

void slashStarComments(boolean flag)

Задает режим обработки многострочных комментариев, выполненных в стиле C.

String toString()

Возвращает представление текущей лексемы в виде объекта класса String.

void whitespaceChars (int low, int high)

Задает символы, воспринимаемые как пробелы.

void wordChars (int low, int high)

Устанавливает, какие символы могут входить в состав слов.

Класс StreamTokenizer можно использовать как основу для создания подпрограмм обработки вводимых из входного потока текстов.

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

Создать графическое приложение с использованием средств проектирования пакета NetBeans IDE 6.1 для выполнения операций ввода-вывода по одному из приведенных ниже вариантов.

Вариант 5-01

Создайте программу копирования файла из одного каталога в другой. Компоненты графического окна: надпись (JLabel) "Копирование файла" в области North, расщепленная панель (JSplitPane) в области Center и  кнопка (JButton) "Копировать" в области South. В левой части расщепленной панели размещен объект класса JFileChooser для выбора файла копирования, а в правой части – другой объект класса JFileChooser, в котором выбирается каталог для копирования. Копирование файла выполняется при нажатии кнопки.

Вариант 5-02

Создайте программу перемещения файла из одного каталога в другой. Компоненты графического окна: надпись (JLabel) "Перемещение файла" в области North, расщепленная панель (JSplitPane) в области Center и  кнопка (JButton) "Переместить" в области South. В левой части расщепленной панели размещен объект класса JFileChooser для выбора перемещаемого файла, а в правой части – другой объект класса JFileChooser, в котором выбирается каталог для перемещения. Перемещение файла выполняется при нажатии кнопки.          

Вариант 5-03

Создайте программу переименования файла или каталога. Компоненты графического окна: надпись (JLabel) "Переименование файла или каталога" в области North, в области Center размещен объект класса JFileChooser, в области South размещены надпись  (JLabel) "Введите имя файла/каталога:", текстовое поле (JTextField) для ввода нового имени и кнопка (JButton)  "Переименовать". Переименование файла или каталога выполняется при нажатии кнопки.

Вариант 5-04

Создайте программу удаления файла или каталога. Компоненты графического окна: надпись (JLabel) "Удаление файла или каталога" в области North, в области Center размещен объект класса JFileChooser, в области South размещены надпись (JLabel) "Введите имя файла/каталога:", текстовое поле (JTextField) для ввода имени удаляемого файла/каталога и кнопка (JButton) "Удалить". Удаление  файла или каталога выполняется при нажатии кнопки после вывода диалогового окна (JDialog) для подтверждения или отмены удаления файла.

Вариант 5-05

Создайте программу вывода полного (абсолютного) пути к выделенному файлу или каталогу. Компоненты графического окна: надпись (JLabel) "Вывод пути" в области North, в области Center размещен объект класса JFileChooser, в области South размещены надпись (JLabel) "Абсолютный путь:" и текстовое поле (JTextField) для вывода абсолютного пути к выделенному файлу.

Вариант 5-06

Создайте программу вывода файлов каталога с заданным расширением. Компоненты графического окна: надпись (JLabel) "Вывод файлов заданных типов" в области North, в области Center размещен объект класса JFileChooser, в области South размещены надпись (JLabel) "Введите тип файла:", текстовое поле (JTextField) для ввода типа  файла (например, ".doc" или "Все файлы") и кнопка  (JButton) "Вывод". Вывод файлов каталога с заданным расширением выполняется при нажатии кнопки.  

Вариант 5-07

Создайте программу вывода размера и даты последней модификации выделенного  файла. Компоненты графического окна: надпись (JLabel) "Вывод длины и даты последней модификации" в области North, в области Center размещен объект класса JFileChooser, в области South размещены надпись (JLabel) "Длина (кБ):" , текстовое поле (JTextField) для вывода длины, надпись (JLabel) "Модифицирован:" и текстовое поле (JTextField) для вывода даты последней модификации.

Вариант 5-08

Создайте программу вывода суммарного размера всех файлов в выделенном каталоге. Компоненты графического окна: надпись (JLabel) "Вывод длины файлов в каталоге" в области North, в области Center размещен объект класса JFileChooser, в области South размещены надпись (JLabel)  "Длина каталога (кБ):" и текстовое поле (JTextField) для вывода суммарной длины файлов в каталоге.

Вариант 5-09

Создайте программу вывода количества файлов каталога с заданным расширением в выделенном каталоге. Компоненты графического окна: надпись (JLabel) "Вывод количества файлов заданных типов" в области North, в области Center размещен объект класса JFileChooser, в области South размещены надпись (JLabel)  "Введите тип файла:", текстовое поле (JTextField) для ввода типа  файла (например, ".doc" или "Все файлы"), надпись (JLabel) "Количество файлов:" и текстовое поле (JTextField) для вывода количества файлов заданного типа. Вывод количества файлов каталога с заданным расширением выполняется при нажатии клавиши Enter в поле ввода типа файла.

Вариант 5-10

Создайте программу для получения характеристик списка  файлов в каталоге с использованием методов класса File. Компоненты графического окна: надпись (JLabel) "Введите имя каталога:" и текстовое поле (JTextField) для ввода пути к каталогу в области North, а в области Center размещена текстовая область (JTextArea) для вывода списка файлов в заданном каталоге.  Вывод списка файлов выполняется при нажатии клавиши Enter в текстовом поле. В каждой строке списка выводится имя файла, его тип, размер и дата последней модификации.

Вариант 5-11

Напишите программу создания нового каталога. Компоненты графического окна: надпись (JLabel) "Создание каталога" в области North, в области Center размещен объект класса JFileChooser, в области South размещены надпись (JLabel)  "Введите имя каталога:", текстовое поле (JTextField) для ввода имени нового каталога и кнопка (JButton) "Создать". Создание нового каталога  с заданным именем в текущем каталоге (выводимом в окне JFileChooser) выполняется при нажатии кнопки.

Вариант 5-12

Создайте программу слияния содержимого выделенных файлов в каталоге. Компоненты графического окна: надпись (JLabel) "Слияние выделенных файлов" в области North, в области Center размещен объект класса JFileChooser, в области South размещены кнопка (JButton) "Выделить", текстовое поле (JTextField) для ввода имени создаваемого файла и кнопка (JButton) "Слить". Файлы сливаются при нажатии кнопки "Слить" в том порядке, в котором они были выделены в окне, а затем отмечены с помощью кнопки "Выделить".      

     

Вариант 5-13

Создайте программу для подсчета количества слов, строк и  символов в текстовом файле с использованием класса StreamTokenizer. Компоненты графического окна: надпись (JLabel) "Подсчет символов, слов и строк в текстовом файле" в области North, в области Center размещен объект класса JFileChooser, в области South размещены кнопка (JButton) "Подсчет", надпись (JLabel) "Количество символов:", текстовое поле (JTextField) для вывода количества символов,  надпись (JLabel)" Количество слов:", текстовое поле (JTextField) для вывода количества слов, надпись (JLabel) "Количество строк:" и текстовое поле (JTextField) для вывода количества строк. Вывод количества символов, слов и строк выполняется при нажатии кнопки.

Вариант 5-14

Создайте программу для подсчета частоты повторения заданного слова в текстовом файле с использованием класса StreamTokenizer. Компоненты графического окна: надпись (JLabel) "Поиск количества повторений слова в текстовом файле" в области North, в области Center размещен объект класса JFileChooser, в области South размещены надпись (JLabel) "Слово поиска:", текстовое поле (JTextField) для ввода слова поиска, флажок с надписью (JLabel) "Учет регистра", кнопка (JButton) "Поиск", надпись (JLabel) "Частота повторения:" и  текстовое поле (JTextField) для вывода частоты повторения слова.  строк. Вывод частоты повторения слова выполняется при нажатии кнопки "Поиск".

Вариант 5-15

Создайте программу небольшого редактора (до 100 строк) с использованием класса BufferedReader. Компоненты графического окна: надпись (JLabel) "Ввод текста в файл" в области North, в области Center размещена текстовая область (JTextField) для ввода текста,  в области South размещены надпись (JLabel) "Введите имя файла:", текстовое поле (JTextField) для ввода имени файла и кнопка (JButton) "Сохранить". Этот редактор вводит данные в массив строк (максимальный размер массива – 100 элементов). Признаком окончания ввода является символ "." в первой позиции строки. При нажатии кнопки введенные строки запоминаются в заданном файле.

Вариант 5-16

Создайте программу небольшого редактора (до 100 строк) с использованием класса BufferedReader. Компоненты графического окна: надпись (JLabel) "Ввод текста в файл" в области North, в области South размещены надпись (JLabel) "Введите имя файла:", текстовое поле (JTextField) для ввода имени файла и кнопка (JButton) "Сохранить". Этот редактор вводит данные с клавиатуры в массив строк (максимальный размер массива – 1000 элементов). Признаком окончания ввода и закрытия  входного потока является ввод Ctrl+Z. При нажатии кнопки "Сохранить" введенные строки запоминаются в заданном файле.

Вариант 5-17

Создайте программу для добавления строк данных в текстовый файл. Каждая строка этого файла содержит одну запись сведений о пользователе со следующими полями: имя пользователя, пароль пользователя и произвольные сведения о пользователе (учетную информацию пользователя). В поле пользователя допустимы пробелы. Разделителем между полями является символ ";". Компоненты графического окна: надпись (JLabel) "Добавление пользователя" в области North, в области Center размещены надпись (JLabel) "Введите имя:", текстовое поле (JTextField) для ввода имени пользователя, надпись (JLabel) "Введите пароль:", текстовое поле (JPasswordField) для ввода пароля пользователя, надпись (JLabel) "Введите учетную информацию:" и текстовое поле (JTextField) для ввода учетной информации пользователя, в области South размещена кнопка (JButton) "Добавить", надпись (JLabel) "Сообщение:" и текстовое поле (JTextField) для вывода сообщения о результате операции.  Имя файла задается в программе. При нажатии кнопки "Добавить" файл просматривается с использованием полей и методов класса StreamTokenizer и, если пользователя с таким именем в файле нет, строка с данными о новом пользователе добавляется в конец файла и выводится сообщение "Пользователь добавлен", иначе выводится сообщение "Пользователь с заданным именем уже есть".

Вариант 5-18

Создайте программу для просмотра данных в текстовом файле. Каждая строка этого файла содержит одну запись сведений о пользователе со следующими полями: имя пользователя, пароль пользователя и произвольные сведения о пользователе (учетную информацию пользователя). В поле пользователя допустимы пробелы. Разделителем между полями является символ ";". Компоненты графического окна: надпись (JLabel)  "Получение данных пользователя" в области North, в области Center размещены надпись (JLabel)  "Введите имя:" и текстовое поле (JTextField) для ввода имени пользователя, в области South размещены кнопка (JButton) "Вывод", надпись (JLabel)  "Пароль:", текстовое поле (JTextField) для вывода пароля пользователя, надпись (JLabel)  "Учетная информация:", текстовое поле (JTextField) для вывода учетной информации пользователя, надпись (JLabel)  "Сообщение:" и текстовое поле (JTextField) для вывода сообщения о результате операции. Имя файла задается в программе.   При нажатии кнопки "Вывод" файл просматривается с использованием полей и методов класса StreamTokenizer и, если пользователь найден, его пароль и учетная информация выводятся в соответствующих полях, иначе выводится сообщение  "Пользователь не найден".

Вариант 5-19

Создайте программу для изменения данных в текстовом файле. Каждая строка этого файла содержит одну запись сведений о пользователе со следующими полями: имя пользователя, пароль пользователя и произвольные сведения о пользователе (учетную информацию пользователя). В поле пользователя допустимы пробелы. Разделителем между полями является символ ";". Компоненты графического окна: надпись (JLabel) "Изменение данных пользователя" в области North, в области Center размещены надпись (JLabel) "Введите имя:" и текстовое поле (JTextField) для ввода имени пользователя, в области South размещены надпись (JLabel) "Новое имя:", текстовое поле (JTextField) для ввода нового имени пользователя, надпись (JLabel) "Новый пароль:", текстовое поле (JPasswordField) для ввода нового пароля пользователя, надпись (JLabel) "Новая учетная информация:", текстовое поле (JTextField) для ввода новой учетной информации пользователя, (JButton) кнопка "Изменить", надпись (JLabel) "Сообщение:" и текстовое поле (JTextField) для вывода сообщения о результате операции. Имя файла задается в программе.  При нажатии кнопки "Изменить" файл просматривается с использованием полей и методов класса StreamTokenizer. Если пользователь найден, файл сначала переписывается во временный файл (при этом строка с новыми данными пользователя изменяется), а затем снова переписывается в исходный файл. Если данные пользователя изменены выводится сообщение "Данные изменены", иначе – сообщение  "Пользователь не найден".

Вариант 5-20

Создайте программу для удаления строки данных из текстового файла. Каждая строка этого файла содержит одну запись сведений о пользователе со следующими полями: имя пользователя, пароль пользователя и произвольные сведения о пользователе (учетную информацию пользователя). В поле пользователя допустимы пробелы. Разделителем между полями является символ ";". Компоненты графического окна: надпись (JLabel) "Удаление пользователя" в области North, в области Center размещены надпись (JLabel) "Введите имя:" и текстовое поле (JTextField) для ввода имени пользователя, в области South размещена кнопка (JButton) "Удалить", надпись (JLabel) "Сообщение:" и текстовое поле (JTextField) для вывода сообщения о результате операции. Имя файла задается в программе.  При нажатии кнопки "Удалить" файл просматривается с использованием полей и методов класса StreamTokenizer. Если пользователь найден, файл сначала переписывается во временный файл (при этом строка с новыми данными пользователя изменяется), а затем снова переписывается в исходный файл. Если данные пользователя удалены выводится сообщение "Пользователь удален", иначе – сообщение  "Пользователь не найден".

Вариант 5-21

Создайте программу для просмотра данных в текстовом файле с использованием класса StreamTokenizer. Каждая строка этого файла содержит одну запись сведений о товаре со следующими полями: имя товара, цена товара (положительное целое число) и произвольные сведения о товаре. В поле сведений о товаре допустимы пробелы. Разделителем между полями является символ ";". Компоненты графического окна: надпись (JLabel) "Покупка товаров" в области North, в области Center размещены раскрывающийся список (JComboBox) с именами товаров,  надпись (JLabel) "Характеристики товара:", текстовое поле (JTextField) для вывода сведений о товаре, (JLabel) надпись "Цена:" и текстовое поле (JTextField) для вывода цены товара, в области South надпись "Количество:", текстовое поле (JTextField) для ввода количества покупаемого товара, кнопка (JButton) "Купить", надпись (JLabel) "Общая цена:" (начальное значение 0) и текстовое поле (JTextField) для вывода общей цены купленных товаров, а также кнопка (JButton) "Сбросить" для обнуления значения текстового поля общей цены.  Имя файла задается в программе.   В начале работы программы файл просматривается с использованием полей и методов класса StreamTokenizer, и из имен товаров формируется раскрывающийся список. При выборе товара активизируется (enables) кнопка "Купить" в текстовом поле вводится количество покупаемого товара (по умолчанию 1). При нажатии кнопки выводится суммарная цена всех купленных товаров (операцию покупки можно повторять несколько раз для разных товаров из раскрывающегося списка, при этом цена купленных товаров суммируется).     

Вариант 5-22

Создайте программу для просмотра данных в текстовом файле. Каждая строка этого файла содержит одну запись сведений о товаре со следующими полями: имя товара, цена товара (положительное целое число) и произвольные сведения о товаре. В поле сведений о товаре допустимы пробелы. Разделителем между полями является символ ";". Компоненты графического окна: надпись (JLabel) "Сведения о товаре" в области North и  расщепленная панель (JSplitPane) в области Center. В левой части расщепленной панели размещен объект класса JList, содержащий список для выбора имени или имен товаров, а в правой части расщепленной панели размещена текстовая область (JtextArea) для вывода сведений о выбранных товарах. Имя файла задается в программе.  В начале работы программы файл просматривается с использованием полей и методов класса StreamTokenizer, и из имен товаров формируется список. При выборе имен  товаров сведения о них выводятся в текстовой области.

Вариант 5-23

Создайте программу для просмотра данных в текстовом файле. Каждая строка этого файла содержит одну запись сведений о товаре со следующими полями: имя товара, цена товара положительное целое число) и произвольные сведения о товаре. В поле сведений о товаре допустимы пробелы. Разделителем между полями является символ ";". Компоненты графического окна: надпись (JLabel) "Сведения о товаре" в области North, в области South размещены раскрывающийся список (JComboBox) с именами товаров,  надпись (JLabel) "Характеристики товара:", текстовое поле (JTextField) для вывода сведений о товаре, надпись (JLabel) "Цена:" и текстовое поле  (JTextField) для вывода цены товара.  Имя файла задается в программе. В начале работы программы файл просматривается с использованием полей и методов класса StreamTokenizer,  и из имен товаров формируется раскрывающийся список. При выборе товара в раскрывающемся списке выводятся характеристики товара и его цена.

Вариант 5-24

Создайте программу для замены слов в текстовом файле с использованием класса StreamTokenizer. Каждая строка этого файла содержит произвольное количество слов, разделенных пробелами и/или запятыми. Компоненты графического окна: надпись (JLabel) "Поиск слов в текстовом файле" в области North, в области Center размещен объект класса JFileChooser, в области South размещены надпись (JLabel) "Слово поиска:", текстовое поле (JTextField) для ввода слова поиска, флажок (JCheckBox) с надписью (JLabel) "Учет регистра", надпись (JLabel) "Количество повторений:" и  текстовое поле (JTextField) для вывода количества замен слова, а также текстовая область (JTextArea) для вывода номеров строк файла, в которых встречается заданное слово.  При нажатии кнопки выполняется поиск слов в строках с использованием полей и методов класса StreamTokenizer.

Вариант 5-25

Создайте программу для замены строк в текстовом файле. Компоненты графического окна: надпись (JLabel) "Замена строк в текстовом файле" в области North, расщепленная панель (JSplitPane) в области Center, в области South размещены надпись (JLabel) "Строка поиска:", текстовое поле (JTextField) для ввода слова поиска, надпись (JLabel) "Строка замены:", текстовое поле (JTextField) для ввода слова замены, флажок (JCheckBox) с надписью (JLabel) "Учет регистра", кнопка (JButton) "Заменить". В левой части расщепленной панели размещен объект класса JFileChooser для выбора файла выводимых файлов (с проверкой, имеет ли выделенный файл расширение ".txt"), а в правой части расщепленной панели размещена текстовая область (JTextArea), в которой выводятся содержимое файлы с произведенными изменениями.  При нажатии кнопки "Заменить" выполняется построчный ввод строк файла, просмотр строк (в строке может быть несколько слов поиска), их изменение и вывод в текстовую область.

Вариант 5-26

Создайте программу для вывода строк текстового файла, содержащих заданную строку символов с использованием класса StreamTokenizer. Компоненты графического окна: надпись (JLabel) "Вывод строк в текстовом файле" в области North, расщепленная панель (JSplitPane) в области Center, в области South размещены надпись (JLabel) "Строка поиска:", текстовое поле (JTextField) для ввода строки поиска, флажок (JCheckBox) с надписью (JLabel) "Учет регистра" и кнопка (JButton)  "Поиск". В левой части расщепленной панели размещен объект класса JFileChooser для выбора файла выводимых файлов (с проверкой, имеет ли выделенный файл расширение ".txt"), а в правой части расщепленной панели размещена текстовая область (JTextArea), в которой выводятся строки файла, содержащие заданную строку поиска. Вывод строк в текстовую область выполняется при нажатии кнопки "Поиск".

Вариант 5-27

Создайте программу для подсчета количества слов, строк и  символов во вводном потоке с клавиатуры. Компоненты графического окна: надпись (JLabel) "Подсчет символов, слов и строк в текстовом файле" в области North, в области South размещены кнопка (JButton) "Подсчет", надпись (JLabel) "Количество символов:", текстовое поле (JTextField) для вывода количества символов,  надпись (JLabel) "Количество слов:", текстовое поле (JTextField) для вывода количества слов, надпись (JLabel) "Количество строк:" и текстовое поле (JTextField) для вывода количества строк. Признаком окончания ввода и закрытия  входного потока является ввод Ctrl+Z. Просмотр вводного потока с клавиатуры выполняется при нажатии кнопки "Подсчет" с  использованием полей и методов класса StreamTokenizer. Полученные значения выводятся в соответствующих текстовых полях.

Вариант 5-28

Создайте программу вывода суммарной длины выделенных файлов в текущем каталоге. Компоненты графического окна: надпись (JLabel) "Вывод длины файлов в каталоге" в области North, в области Center размещен объект класса JFileChooser, в области South размещены кнопка (JButton) "Вывод", надпись  (JLabel) "Длина файлов (кБ):" и текстовое поле (JTextField) для вывода суммарной длины выделенных файлов. При нажатии кнопки "Вывод" в текстовом поле выводится суммарная длина выделенных в объекте класса JFileChooser файлов.

Вариант 5-29

Создайте программу вывода содержимого текстового файла на экран. Компоненты графического окна: надпись (JLabel) "Вывод текстового файла" в области North, расщепленная панель (JSplitPane) в области Center, раскрывающийся список (JComboBox) для выбора шрифта выводимого текста и кнопка (JButton) "Вывод" в области South. В левой части расщепленной панели размещен объект класса JFileChooser для выбора выводимого файла (с проверкой, имеет ли выделенный файл расширение ".txt", ".html" или ".htm"), а в правой части – текстовая область (JTextArea) для вывода содержимого файла. Вывод текста выполняется при нажатии кнопки "Вывод".

Вариант 5-30

Создайте программу вывода содержимого текстовых файлов на экран. Компоненты графического окна: надпись (JLabel) "Вывод текстовых файлов" в области North, расщепленная панель (JSplitPane) в области Center, и кнопка (JButton) "Вывод" в области South. В левой части расщепленной панели размещен объект класса JFileChooser для выбора файла (с проверкой, имеет ли выделенный файл расширение ".txt", ".html" или ".htm"), а в правой части расщепленной панели размещена панель с закладками (JTabbedPane). Каждая панель в JTabbedPane содержит  в области Center текстовое поля (JTextArea) для вывода содержимого файла, а в  области South – кнопку (JButton) "Удалить". При нажатии кнопки "Вывод" в JTabbedPane добавляется новая панель с текстом выбранного файла, а при нажатии кнопки "Удалить" в закладке текущая закладка удаляется.

 

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

В отчете должен быть представлен текст программы (без сгенерированного кода), а также один или несколько скриншотов, отражающих выполнение программы.       

6. Вопросы для самоконтроля

  1.  Дайте определение файловой системы.
  2.  Какие возможности по определению характеристик файлов предоставляют методы класса File в языке Java?
  3.  Какие возможности по выполнению операций над файлами и каталогами предоставляют методы класса File в языке Java?
  4.  Какие методы класса File используются для получения списка файлов в языке Java? Как можно вывести список файлов, имена которых удовлетворяют заданным критериям?
  5.  Как в Swing реализован доступ к файлам и каталогам с помощью класса JFileChooser? Какие возможности по работе с файлами предоставляют методы этого класса?
  6.  Как организован ввод-вывод в программах на языке Java и какие два типа потоков ввода-вывода определены в Java?
  7.  Какие методы ввода для байтового потока определены в классе InputStream? Коротко охарактеризуйте каждый метод.
  8.  Какие методы вывода байтового потока определены в классе OutputStream? Коротко охарактеризуйте каждый метод.
  9.  Как выполняется байтовый ввод и вывод в файлы в программах на языке Java?
  10.  Как выполняется ввод и вывод в байтовый массив в программах на языке Java?
  11.  Как выполняется слияние байтовых потоков ввода в программах на языке Java?
  12.  Как определяются фильтрованные байтовые потоки в программах на языке Java?
  13.  Как выполняется ввод и вывод буферизованных байтовых потоков в программах на языке Java?
  14.  Как выполняется ввод и вывод примитивных типов данных в байтовых потоках в программах на языке Java?
  15.  Как выполняется возврат считанного байта или байтов обратно во вводной поток в программах на языке Java?
  16.  Как выполняется байтовый вывод на печать в программах на языке Java?
  17.  Какие методы ввода для символьного потока определены в классе Reader? Коротко охарактеризуйте каждый метод.
  18.  Какие методы вывода символьного потока определены в классе Writer? Коротко охарактеризуйте каждый метод.
  19.  Как выполняется преобразование байтового потока в символьный, и обратное преобразование в программах на языке Java?
  20.  Как выполняется символьный ввод и вывод в файлы в программах на языке Java?
  21.  Как выполняется ввод и вывод в символьный массив в программах на языке Java?
  22.  Как выполняется ввод и вывод буферизованных символьных потоков, а также слежение за номерами строк в программах на языке Java?
  23.  Как выполняется фильтрованный ввод и вывод для символьных потоков, а также возврат считанного символа или символов обратно во вводной поток в программах на языке Java?
  24.  Как выполняется ввод и вывод для символьных строк в программах на языке Java?
  25.  Как выполняется обмен символами между вычислительными потоками в программах на языке Java?
  26.  Как выполняется символьный вывод на печать в программах на языке Java?
  27.  Как в программах на языке Java выполняется ввод с консоли и переопределение стандартного ввода-вывода?
  28.  Какие типы слов определены в классе StreamTokenizer языка Java?
  29.  Какие возможности по анализу текста предоставляют методы класса StreamTokenizer языка Java?
  30.  Как выполняется анализ текста с помощью класса StreamTokenizer в программах на языке Java?

айл: file:///web/5fan/public_html/www/files/3/5fan_ru_18085_bf1e099866486aa974cabd70feee6d84.doc   Создан: 2007-07-12T14:39:00Z Модифицирован:     Автор:


 

А также другие работы, которые могут Вас заинтересовать

58196. Система и окружающая среда. Персональный компьютер как система 569.5 KB
  Солнечная система Футбольная команда Растительный мир Компьютер Автомобиль Математический язык Закончите предложение: Рассмотрение составных частей сложного объекта в их взаимодействии и взаимовлиянии это Система Системный подход Системный эффект Приведите пример отношения...
58198. Російська революція 1905-1907 рр. в Україні 48 KB
  Мета: формувати в учнів знання про події російської революції 19051907 рр. в Україні а також охарактеризувати процес активізації громадськополітичного життя в Україні в даний період; розвивати в учнів уміння встановлювати причинно-наслідкові зв’язки...
58200. Части речи, Характеристика основных частей речи 43.5 KB
  Орфолого-синтаксический способ словообразования осуществляется при переходе слов, принадлежащих к какой-либо части речи, в иную часть речи, например: прилагательные булочная, лесничий, рабочий, столовая перешли в имена существительные
58202. Функции белков 74.5 KB
  Белки выполняют чрезвычайно важные и многообразные функции. Белки входят в состав всех клеточных мембран и органоидов клетки. Двигательную функцию выполняют особые сократительные белки.