Опубликован: 04.12.2009 | Доступ: свободный | Студентов: 8416 / 657 | Оценка: 4.30 / 3.87 | Длительность: 27:27:00
Лекция 7:

Важнейшие объектные типы

7.6. Работа с файлами и папками

Концепция работы с файлами в Java включает две составляющие:

  • Работа с файлами и папками с помощью объектов типа File.

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

  • Работа потоками ввода-вывода.

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

Работа с файлами и папками с помощью объектов типа File

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

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

  • File("Имя папки")
  • File("Имя файла")
  • File("Имя папки","Имя файла").

При этом имена могут быть как короткими (локальными), без указания пути к файлу или папке, так и длинными (абсолютными), с указанием пути. В приведенной далее таблице файлы (папки) ищутся по имени в соответствии с правилами поиска файлов в операционной системе. Для платформы Windows® вместо символа "\" в строках, соответствующих путям, должна использоваться последовательность "\\".

Важнейшие файловые операции, инкапсулированные классом File:

Таблица 7.3.
Поле или метод Что содержит или делает
Переменные класса
String pathSeparator Содержит строку с символом разделителя пути в операционной системе. Это "/" в Unix-подобных системах и "\" в Windows®.
char pathSeparatorChar Содержит символ разделителя пути в операционной системе. Это '/' в Unix-подобных системах и '\' в Windows®.
String separator Содержит строку с символом разделителя между именами файлов и файловых масок в операционной системе.
char separatorChar Содержит символ разделителя между именами файлов и файловых масок в операционной системе.
Проверка параметров файла или папки
boolean exists() Возвращает true в случае, когда файл (или папка) с заданным в конструкторе именем существует. Иначе false.
long length() Возвращает длину файла в байтах в случае, когда файл с заданным в конструкторе именем существует и не является папкой. Иначе 0L.
boolean canRead() Возвращает true в случае, когда файл (или папка) с заданным в конструкторе именем существует и доступен по чтению. Иначе false. (В Unix-подобных системах существуют файлы, доступные только по записи). Может возбуждать SecurityException.
boolean setReadOnly() Возвращает true в случае, когда файл (или папка) с заданным в конструкторе именем существует, и ему удалось установить статус "доступен только по чтению". Иначе false.
boolean canWrite() Возвращает true в случае, когда файл (или папка) с заданным в конструкторе именем существует и доступен по записи. Иначе false. (В операционных системах существуют файлы, доступные только по чтению). Может возбуждать SecurityException.
boolean isDirectory() Возвращает true в случае, когда файл или папка с заданным в конструкторе именем существует и является папкой. Иначе false.
boolean isFile() Возвращает true в случае, когда файл или папка с заданным в конструкторе именем существует и является файлом. Иначе false.
boolean isHidden() Возвращает true в случае, когда файл или папка с заданным в конструкторе именем существует и является скрытым. Иначе false. В Unix-образных системах скрытыми являются файлы, имена которых начинаются с точки. В Windows® – те, которые имеют атрибут "hidden" ("скрытый").
long lastModified() Возвращает время последней модификации файла, если он существует и доступен по чтению. Иначе 0L. Время отсчитывается в миллисекундах, прошедших с 0 часов 1 января 1970 года (по Гринвичу).
boolean setLastModified(long time) Устанавливает время последней модификации файла. Возвращает true, если он существует и доступен по записи. Иначе false. Время отсчитывается в миллисекундах, прошедших с 0 часов 1 января 1970 года (по Гринвичу).
Путь и имя файла (папки)
String getName() Возвращает короткое имя файла или папки.
String getParent() Возвращает абсолютное имя родительской папки – то есть папки, в которой находится файл (или папка), соответствующий файловому объекту.
String getAbsolutePath() Возвращает абсолютный путь к файлу или папке, включая имя файла. При этом если в имени файла в конструкторе была задана относительная адресация, соответствующая часть пути сохраняется в возвращаемой строке.
String getCanonicalPath() Возвращает абсолютный путь к файлу или папке, включая имя файла. При этом если в имени файла в конструкторе была задана относительная адресация, соответствующая часть пути заменяется в возвращаемой строке на канонический вариант адресации – без элементов относительной адресации. Возбуждает IOException, если канонический путь не может быть построен.
int compareTo(File f) Сравнение имен файлов (папок), сопоставляемых текущему файловому объекту и объекту f. Возвращает 0 в случае, когда абсолютные имена файлов (папок) совпадают. Иначе возвращает число, зависящее от разницы в длинах имен и кодов составляющих их символов. Сравнение зависимо от операционной системы – в Unix-образных системах регистр символов имеет значение, в Windows® – не имеет. Соответствие понимается абстрактно на уровне имен и путей – самих файлов может не существовать.
boolean isAbsolute() Возвращает true в случае, когда адресация к имени файла (папки) текущего файлового объекта является абсолютной. Хотя может содержать элементы относительной адресации, то есть не быть канонической.
boolean equals(Object obj) Возвращает true тогда и только тогда, когда текущий объект и параметр obj соответствуют одному и тому же файлу (папке) . С учетом правил о путях и регистрах символов, задаваемых операционной системой. Соответствие понимается абстрактно на уровне имен и путей – самих файлов может не существовать.
Создание/уничтожение/переименование файлов и папок
boolean createNewFile() Попытка создания файла или папки по имени, которое было задано в конструкторе объекта. В случае успеха возвращается true, иначе false. Возбуждает IOException, если файл не может быть создан (например, уже существует).
File createTempFile(String prefix, String suffix)

File createTempFile(String prefix, String suffix, File folder)

Метод класса. Обеспечивает создание пустого файла (или папки), задаваемого коротким именем prefix+suffix в папке операционной системы, предназначенной для временных файлов. Возвращает ссылку на объект. Префикс должен быть не менее 3 символов. Возбуждает IOException, если файл не может быть создан (например, уже существует).
boolean mkdir() Попытка создания папки по имени, которое было задано в конструкторе объекта. Возвращает true в случае успешного создания и false в других случаях.
boolean mkdirs() Попытка создания папки по имени, которое было задано в конструкторе объекта, причем заодно создаются все папки, заданные в пути, если они не существовали. Возвращает true в случае успешного создания и false в других случаях.
boolean delete() Попытка удаления файла или папки по имени, которое было задано в конструкторе объекта. Возвращает true в случае успешного удаления и false в других случаях.
boolean renameTo(File dest) Попытка переименования файла или папки с имени, которое было задано в конструкторе объекта, на новое, задаваемое параметром dest. Возвращает true в случае успешного переименования и false в других случаях.
Создание нового файлового объекта с помощью имеющегося
File getAbsoluteFile() Создание нового файлового объекта по абсолютному пути, соответствующему текущему файловому объекту.
File getCanonicalFile() Создание нового файлового объекта по каноническому пути, соответствующему текущему файловому объекту. Возбуждает IOException, если канонический путь не может быть построен.
File getParentFile() Создание нового файлового объекта по абсолютному пути, соответствующему родительской папке для текущего файлового объекта.
Списки папок и файлов
String[] list()

String[] list(FilenameFilter filter)

Возвращает массив строк (список) коротких имен находящихся в папке файлов и папок. Имена элементов, находящихся во вложенных папках, не показываются. Если файловый объект не соответствует существующей папке, возвращает null. При наличии фильтра возвращаются только те имена, которые соответствуют маске фильтра.
File[] listFiles()

File[] listFiles(FilenameFilter filter)

Возвращает массив файловых объектов, соответствующих находящимся в папке файлов и папок. Элементы, находящиеся во вложенных папках, не учитываются. Если текущий файловый объект не соответствует существующей папке, возвращает null. При наличии фильтра возвращаются объекты только для тех имен, которые соответствуют маске фильтра.
File[] listRoots() Возвращает массив файловых объектов, соответствующих возможным на данном компьютере корневым папкам. В Unix это папка "/", в Windows® – корневые папки всех возможных дисков.

Пример работы с файловыми объектами:

File f1=new File(".."); // "." , "/" , "C:/../"
System.out.println("getAbsolutePath(): "+f1.getAbsolutePath());

try{
System.out.println("getCanonicalPath(): "+f1.getCanonicalPath());
}
catch(Exception e){
System.out.println("Исключение от getCanonicalPath() ");
};

System.out.println("exists(): "+f1.exists());
System.out.println("canRead(): "+f1.canRead());
System.out.println("canWrite(): "+f1.canWrite());
Полетаев Дмитрий
Полетаев Дмитрий
Не очень понятно про оболочечные Данные,ячейки памяти могут наверно размер менять,какое это значение те же операции только ячейки больше,по скорости тоже самое
Максим Старостин
Максим Старостин

Код с перемещением фигур не стирает старую фигуру, а просто рисует новую в новом месте. Точку, круг.