Комментарии (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.