Java: Использование класса File

Author: Tatyana Milkina

В отличие от большинства классов ввода/вывода, класс File языка Java работает не с потоками, а непосредственно с файлами. Данный класс позволяет получить информацию о файле: права доступа, время и дата создания, путь к каталогу. А также осуществлять навигацию по иерархиям подкаталогов.

1. Конструкторы класса File

File(String path) - указывается путь к файлу
File(File dir, String name) - указывается объекта класса File (каталог) и имя файла
File(String dirPath, Sring name) - указывается путь к файлу и имя файла
File(URI uri) - указывается объекта URI, описывающий файл.

2. Методы класса File

  • getAbsolutePath() - абсолютный путь файла, начиная с корня системы.
  • canRead() - доступно для чтения
  • canWrite() - доступно для записи
  • exists() - файл существует или нет
  • getName() - возвращает имя файла
  • getParent() - возвращает имя родительского каталога
  • getPath() - путь
  • lastModified() - дата последнего изменения
  • isFile() - объект является файлом, а не каталогом
  • isDirectory()- объект является каталогом
  • isAbsolute() - возвращает true, если файл имеет абсолютный путь
  • renameTo(File newPath) - переименовывает файл. В параметре указывается имя нового имени файла. Если переименование прошло неудачно, то возвращается false
  • delete() - удаляет файл. Также можно удалить пустой каталог

Пример 1. Получения информации о файле

import java.io.File;

public class FileExample {
    public static void main(String[] args) {
        File file = new File("src/io");

        System.out.println("Имя файла: " + file.getName());
        System.out.println("Путь: " + file.getPath());
        System.out.println("Абсолютный путь: " + file.getAbsolutePath());
        System.out.println("Родительский каталог: " + file.getParent());
        System.out.println(file.exists() ? "Файл/каталог существует." : "Файл/каталог не существует.");
        System.out.println(file.canWrite() ? "Файл/каталог доступен для редактирования."
                : "Файл/каталог не доступен для редактирования.");
        System.out.println(file.canRead() ? "Файл/каталог доступен для чтения." : "Файл/каталог не доступен для чтения.");
        System.out.println((file.isDirectory() ? "Каталог." : "Не каталог."));
        System.out.println(file.isFile() ? "Файл." : "Не файл.");
        System.out.println(file.isAbsolute() ? "Абсолютный путь." : "Не абсолютный путь.");
        System.out.println("Дата последнего редактирования: " + file.lastModified());
        System.out.println("Размер: " + file.length() + " байт.");
    }
}

Каталог - это тоже объект класса File, который содержит список других файлов и каталогов. После создания объекта класса File, являющего каталогом, его метод isDirectory() вернёт значение true.

Для создания каталога можно использовать метод mkdir(), который вернёт true в успешном случае. Если указанный путь уже существует или каталог нельзя создать из-за отсутствия полного пути к нему, то вернётся false.

Метод mkdirs() создаёт сам каталог, так и всех его родителей.

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

Есть ещё похожий метод listFiles(), который возвращает массив файлов (объектов, а не их имён).

Пример 2. Получение содержимого каталога

import java.io.File;

public class DirList {
    public static void main(String[] args) {
        String catalogName = "src";
        File catalog = new File(catalogName);

        if (catalog.isDirectory()) {
            System.out.println("Папка " + catalogName);
            String[] list = catalog.list();
            if (list != null) {
                for (String fileName : list) {
                    File file = new File(catalogName + "/" + fileName);
                    if (file.isDirectory()) {
                        System.out.printf("\t%s каталог%n", fileName);
                    } else {
                        System.out.printf("\t%s файл%n", fileName);
                    }
                }
            }
        } else {
            System.out.println(catalogName + " не является каталогом");
        }
    }
}
Read also:
Comments