Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры-2 оопип часть 4.doc
Скачиваний:
46
Добавлен:
01.04.2014
Размер:
445.44 Кб
Скачать

32. Определение файла. Тестирование проверка объектов File

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

Объект класса File является абстрактным представлением файла и пути к нему. Он устанавливает только соответствие с ним, при этом для создания объекта неважно, существует ли такой файл на диске. После создания можно выполнить проверку, вызвав метод exists, который возвращает значение true, если файл существует. Создание или удаление объекта класса File никоим образом не отображается на реальных файлах. Для работы с содержимым файла можно получить экземпляры FileI/OStream.

Объект File может указывать на каталог (узнать это можно путем вызова метода isDirectory()). Метод list возвращает список имен (массив String) содержащихся в нем файлов (если объект File не указывает на каталог – будет возвращен null).

Также класс File предоставляет возможность получения некоторой информации о файле.

  • Методы canRead и canWrite – возвращается boolean значение, можно ли будет приложению производить чтение и изменение содержимого из файла, соответственно.

  • getName – возвращает строку – имя файла (или каталога).

  • getParent, getParentName – возвращают каталог, где файл находится в виде строки названия и объекта File, соответственно.

  • getPath – возвращает путь к файлу (при этом в строку преобразуется абстрактный путь, на который указывает объект File).

  • Файл можно и удалить – для этого предназначены методы delete и deleteOnExit. При вызове метода delete файл будет удален сразу же, а при вызове deleteOnExit по окончании работы Java-машины (только при корректном завершении работы) отменить запрос уже невозможно.

  • Таким образом, класс File дает возможность достаточно полного управления файловой системой.

  • Следующий пример демонстрирует использование объектов класса File:

  • import java.io.*;

  • public class FileDemo {

  • public static void findFiles(File file, FileFilter filter,

  • PrintStream output) throws IOException{

  • if (file.isDirectory()) {

  • File[] list = file.listFiles();

  • for (int i=list.length; --i>=0;) {

  • findFiles(list[i], filter, output);

  • }

  • } else {

  • if (filter.accept(file))

  • output.println("\t" + file.getCanonicalPath());

  • }

  • }

  • public static void main(String[] args) {

  • class NameFilter implements FileFilter {

  • private String mask;

  • NameFilter(String mask) {

  • this.mask = mask;

  • }

  • public boolean accept(File file){

  • return (file.getName().indexOf(mask)!=-1)?true:false;

  • }

  • }

  • File pathFile = new File(".");

  • String filterString = ".java";

  • try {

  • FileFilter filter = new NameFilter(filterString);

  • findFiles(pathFile, filter, System.out);

  • } catch(Exception e) {

  • e.printStackTrace();

  • }

  • System.out.println("work finished");

  • }

  • }

33. Чтение и запись файлов

Класс FileInputStream используется для чтения данных из файла. Конструктор такого класса в качестве параметра принимает название файла, из которого будет производиться считывание. При указании строки имени файла нужно учитывать, что она будет напрямую передана операционной системе, поэтому формат имени файла и пути к нему может различаться на разных платформах. Если при вызове этого конструктора передать строку, указывающую на несуществующий файл или каталог, то будет брошено java.io.FileNotFoundException. Если же объект успешно создан, то при вызове его методов read() возвращаемые значения будут считываться из указанного файла.

Для записи байт в файл используется класс FileOutputStream. При создании объектов этого класса, то есть при вызовах его конструкторов, кроме имени файла, также можно указать, будут ли данные дописываться в конец файла, либо файл будет перезаписан. Если указанный файл не существует, то сразу после создания FileOutputStream он будет создан. При вызовах методов write() передаваемые значения будут записываться в этот файл. По окончании работы необходимо вызвать метод close(), чтобы сообщить системе, что работа по записи файла закончена.