← Назад к вопросам

Что такое класс File?

2.2 Middle🔥 191 комментариев
#Другое

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Класс File в Java

File — это класс из пакета java.io, представляющий путь к файлу или директории в файловой системе. Класс File не содержит данные файла — он только работает с путями и метаданными (размер, дата изменения, права доступа и т.д.).

Основное назначение

  • Работа с путями к файлам и директориям
  • Проверка существования файлов
  • Получение информации о файлах (размер, дата изменения)
  • Создание, удаление, переименование файлов и папок
  • Перечисление содержимого директорий

Импорт и создание

import java.io.File;

public class FileExample {
    public static void main(String[] args) {
        // Создание объекта File
        // Это НЕ создаёт файл, только объект, представляющий путь
        File file = new File("data.txt");
        
        // Абсолютный путь
        File absoluteFile = new File("/home/user/documents/data.txt");
        
        // Путь относительно другой директории
        File relativeFile = new File("/home/user", "documents/data.txt");
        
        // Разделитель путей зависит от ОС
        String separator = File.separator;  // "/" на Linux/Mac, "\\" на Windows
    }
}

Основные методы File

1. Проверка существования и типа

public class FileCheckExample {
    public static void main(String[] args) {
        File file = new File("data.txt");
        
        // Существует ли файл/директория
        if (file.exists()) {
            System.out.println("Файл/директория существует");
        }
        
        // Это файл?
        if (file.isFile()) {
            System.out.println("Это файл");
        }
        
        // Это директория?
        if (file.isDirectory()) {
            System.out.println("Это директория");
        }
        
        // Скрытый ли файл
        if (file.isHidden()) {
            System.out.println("Файл скрыт");
        }
    }
}

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

public class FileInfoExample {
    public static void main(String[] args) {
        File file = new File("document.pdf");
        
        // Размер файла в байтах
        long size = file.length();
        System.out.println("Размер: " + size + " байт");
        System.out.println("Размер: " + (size / 1024) + " КБ");
        
        // Абсолютный путь
        String absolutePath = file.getAbsolutePath();
        System.out.println("Абсолютный путь: " + absolutePath);
        
        // Каноническая путь (нормализованная)
        try {
            String canonicalPath = file.getCanonicalPath();
            System.out.println("Каноническая путь: " + canonicalPath);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        // Имя файла
        String fileName = file.getName();
        System.out.println("Имя файла: " + fileName);
        
        // Родительская директория
        String parentPath = file.getParent();
        System.out.println("Родитель: " + parentPath);
        
        File parentDir = file.getParentFile();
        
        // Дата последнего изменения (в миллисекундах)
        long lastModified = file.lastModified();
        System.out.println("Последнее изменение: " + new Date(lastModified));
    }
}

3. Операции с файлами

public class FileOperationsExample {
    public static void main(String[] args) throws IOException {
        File file = new File("newfile.txt");
        
        // Создание нового файла
        if (file.createNewFile()) {
            System.out.println("Файл создан");
        } else {
            System.out.println("Файл уже существует");
        }
        
        // Удаление файла
        if (file.delete()) {
            System.out.println("Файл удалён");
        } else {
            System.out.println("Не удалось удалить файл");
        }
        
        // Переименование/перемещение
        File newFile = new File("renamed.txt");
        if (file.renameTo(newFile)) {
            System.out.println("Файл переименован");
        }
        
        // Права доступа
        file.setReadable(true);    // Доступен для чтения
        file.setWritable(true);    // Доступен для записи
        file.setExecutable(true);  // Исполняемый
    }
}

4. Работа с директориями

public class DirectoryExample {
    public static void main(String[] args) throws IOException {
        // Создание директории
        File dir = new File("my_directory");
        if (dir.mkdir()) {
            System.out.println("Директория создана");
        }
        
        // Создание вложенных директорий
        File nestedDir = new File("path/to/nested/directory");
        if (nestedDir.mkdirs()) {
            System.out.println("Вложенные директории созданы");
        }
        
        // Список файлов в директории
        File[] files = dir.listFiles();
        if (files != null) {
            for (File file : files) {
                System.out.println(file.getName() + " (" + 
                    (file.isDirectory() ? "DIR" : "FILE") + ")");
            }
        }
        
        // Список имён файлов (только имена, не объекты)
        String[] fileNames = dir.list();
        if (fileNames != null) {
            for (String name : fileNames) {
                System.out.println(name);
            }
        }
        
        // Рекурсивный обход директории
        listFilesRecursive(dir, 0);
    }
    
    static void listFilesRecursive(File dir, int depth) {
        File[] files = dir.listFiles();
        if (files != null) {
            for (File file : files) {
                String indent = "  ".repeat(depth);
                System.out.println(indent + file.getName());
                if (file.isDirectory()) {
                    listFilesRecursive(file, depth + 1);
                }
            }
        }
    }
}

5. Фильтрация файлов

public class FileFilterExample {
    public static void main(String[] args) {
        File dir = new File(".");
        
        // Фильтр для Java файлов
        File[] javaFiles = dir.listFiles(file -> 
            file.isFile() && file.getName().endsWith(".java")
        );
        
        System.out.println("Java файлы:");
        if (javaFiles != null) {
            for (File file : javaFiles) {
                System.out.println(file.getName());
            }
        }
        
        // Использование FileFilter интерфейса
        FileFilter javaFilter = new FileFilter() {
            @Override
            public boolean accept(File file) {
                return file.getName().endsWith(".java");
            }
        };
        
        File[] javaFilesAlt = dir.listFiles(javaFilter);
    }
}

6. Получение информации о диске

public class DiskSpaceExample {
    public static void main(String[] args) {
        File file = new File("/");
        
        // Общий размер раздела
        long total = file.getTotalSpace();
        System.out.println("Всего: " + (total / 1024 / 1024 / 1024) + " ГБ");
        
        // Свободное место
        long free = file.getFreeSpace();
        System.out.println("Свободно: " + (free / 1024 / 1024 / 1024) + " ГБ");
        
        // Использованное место
        long usable = file.getUsableSpace();
        System.out.println("Доступно: " + (usable / 1024 / 1024 / 1024) + " ГБ");
    }
}

Современный подход: NIO.2 (NIO2.2)

Для новых проектов рекомендуется использовать java.nio.file.Path и java.nio.file.Files:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class NIO2Example {
    public static void main(String[] args) throws IOException {
        // Создание пути
        Path path = Paths.get("data.txt");
        
        // Проверка существования
        if (Files.exists(path)) {
            System.out.println("Файл существует");
        }
        
        // Создание файла
        Files.createFile(path);
        
        // Запись в файл
        Files.write(path, "Hello, World!".getBytes());
        
        // Чтение из файла
        String content = new String(Files.readAllBytes(path));
        System.out.println(content);
        
        // Удаление файла
        Files.delete(path);
        
        // Перечисление файлов
        Files.walk(Paths.get("."))
            .filter(Files::isRegularFile)
            .forEach(System.out::println);
    }
}

Преимущества NIO.2 над File

  • Лучшая производительность с большими списками файлов
  • Более современный API с stream'ами
  • Атомарные операции (например, File.move атомарна)
  • Лучше для больших файлов (работа с памятью)
  • Полная поддержка links, attributes и т.д.

Когда использовать File

  • Простые операции с путями
  • Наследование (старый код)
  • Когда NIO2 недоступен (старые версии Java)

Когда использовать NIO.2 (Files/Path)

  • Новые проекты
  • Работа с большими объёмами файлов
  • Сложные операции с файловой системой
  • Потоковая обработка файлов

Класс File — это базовый инструмент для работы с файловой системой в Java, но для современных приложений лучше использовать NIO.2.

Что такое класс File? | PrepBro