Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_Po_Tp.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.44 Mб
Скачать

3.2 Приложение DirList

Задание. Создать автономное приложение DirList, в окне которого содержится текстовая область, в которой выводится список всех файлов и каталогов, расположенных в заданном каталоге. Имена файлов выводятся строчными буквами, а имена каталогов - прописными.

Методические указания. Приложение должно быть создано на основе шаблона, содержащегося в Приложении 7.

Конструктор класса фрейма (метод MainWndFrame()).

В конструкторе класса фрейма объявим следующие переменные:

TextArea text; // текстовая область

File dir; // объект, ассоциированный с каталогом

String[] dirList; // список файлов и каталогов

File file; // объект, ассоциированный с файлом

В качестве поля редактирования создадим текстовую область text при помощи оператора new, установим для этой области запрет на редактирование методом setEditable(), а затем добавим эту область в центральную часть фрейма методом add().

Создадим объект класса File для каталога "c:" и ссылку на этот объект присвоим переменной dir. При помощи метода list() получим список dirList всех файлов и каталогов каталога dir.

Далее в цикле по i (i от 0 до dirList.length): создадим объект file, передавая конструктору строку dir.getPath()+"\\"+dirList[i] (полное имя каждого пункта списка); если объект file является файлом (проверяется при помощи метода isFile()), то добавить в текстовую область text имя файла строчными буквами, иначе - вывести имя каталога прописными буквами, например:

text.appendText(dirList[i].toLowerCase()+"\r\n");

3.3 Произвольный доступ к файлам

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

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

Класс RandomAccessFile можно создать с помощью либо объектов File, либо переменной типа String, в которой описывается путь к файлу:

public RandomAccessFile(File file, String mode);

public RandomAccessFile(String name, String mode);

При создании объекта RandomAccessFile указывается режим работы с файлом: читать файл или читать и записывать. Файл открывается на чтение и/или запись после реализации объекта RandomAccessFile. Открыв файл, можно читать или писать данные одним из простейших способов - либо байт за байтом, либо строку за строкой. Так же как и все методы класса File, каждый метод класса RandomAccessFile вызывает исключение IOException.

Позиционирование внутри файла обеспечивается методом seek(), в качестве параметра которому передается абсолютное смещение внутри файла. После вызова этого метода текущая позиция в файле устанавливается в соответствии с переданным параметром.

В любой момент можно определить текущую позицию внутри файла, вызвав функцию getFilePointer().

Еще один метод, имеющий отношение к позиционированию, называется skipBytes() - он продвигает текущую позицию в файле на заданное количество байт вперед.

Дескриптор файла можно определить с помощью метода getFD(), а длину файла в байтах - методом length().

Ряд методов предназначен для выполнения как обычного, так и форматированного ввода из файла. Этот набор аналогичен методам, определенным для потоков:

public int read();

public int read(byte b[]);

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

public final boolean readBoolean();

public final byte readByte();

public final char readChar();

public final double readDouble();

public final float readFloat();

public final void readFully(byte b[]);

public final void readFully(byte b[], int off, int len);

public final int readInt();

public final String readLine();

public final long readLong();

public final short readShort();

public final int readUnsignedByte();

public final int readUnsignedShort();

public final String readUTF();

Существуют также методы, позволяющие выполнять обычную или форматированную запись в файлы с прямым доступом:

public void write(byte b[]);

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

public void write(int b);

public final void writeBoolean(boolean v);

public final void writeByte(int v);

public final void writeBytes(String s);

public final void writeChar(int v);

public final void writeChars(String s);

public final void writeDouble(double v);

public final void writeFloat(float v);

public final void writeInt(int v);

public final void writeLong(long v);

public final void writeShort(int v);

public final void writeUTF(String str);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]