Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Работа с файлом
Работа с файлом — это набор операций для создания, чтения, записи, изменения и удаления файлов в файловой системе. В Java это осуществляется через классы пакета java.io, java.nio, и java.nio.file (рекомендуется для новых проектов).
Основные операции с файлами
1. Создание файла
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
// Способ 1: Используя java.io.File
public void createFileOld() throws IOException {
File file = new File("myfile.txt");
if (file.createNewFile()) {
System.out.println("Файл создан");
} else {
System.out.println("Файл уже существует");
}
}
// Способ 2: Используя java.nio.file (рекомендуется)
public void createFileNew() throws IOException {
Files.createFile(Paths.get("myfile.txt"));
}
// Способ 3: Создание с попыткой создания родительских папок
public void createFileWithDirs() throws IOException {
Files.createDirectories(Paths.get("dir/subdir"));
Files.createFile(Paths.get("dir/subdir/myfile.txt"));
}
2. Чтение файла
import java.io.BufferedReader;
import java.io.FileReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
// Способ 1: Построчное чтение
public void readFileLineByLine() throws IOException {
try (BufferedReader reader = new BufferedReader(
new FileReader("myfile.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
// Способ 2: Чтение всего файла в одну строку
public void readEntireFile() throws IOException {
String content = new String(
Files.readAllBytes(Paths.get("myfile.txt"))
);
System.out.println(content);
}
// Способ 3: Чтение всех строк в список
public void readAllLines() throws IOException {
List<String> lines = Files.readAllLines(Paths.get("myfile.txt"));
lines.forEach(System.out::println);
}
// Способ 4: Потоковое чтение больших файлов
public void readLargeFile() throws IOException {
Files.lines(Paths.get("large-file.txt"))
.filter(line -> line.contains("keyword"))
.forEach(System.out::println);
}
3. Запись в файл
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
// Способ 1: Запись с перезаписью
public void writeToFile() throws IOException {
try (BufferedWriter writer = new BufferedWriter(
new FileWriter("myfile.txt"))) {
writer.write("Hello, World!");
writer.newLine();
writer.write("Second line");
}
}
// Способ 2: Использование NIO
public void writeToFileNIO() throws IOException {
String content = "Hello, World!\nSecond line";
Files.write(Paths.get("myfile.txt"), content.getBytes());
}
// Способ 3: Добавление к существующему файлу
public void appendToFile() throws IOException {
Files.write(
Paths.get("myfile.txt"),
"New line\n".getBytes(),
StandardOpenOption.APPEND
);
}
// Способ 4: Запись списка строк
public void writeLines() throws IOException {
List<String> lines = List.of("Line 1", "Line 2", "Line 3");
Files.write(Paths.get("myfile.txt"), lines);
}
4. Удаление файла
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
// Способ 1: Используя File
public void deleteFileOld() {
File file = new File("myfile.txt");
if (file.delete()) {
System.out.println("Файл удалён");
}
}
// Способ 2: Используя NIO (выбрасывает исключение если нет файла)
public void deleteFileNew() throws IOException {
Files.delete(Paths.get("myfile.txt"));
}
// Способ 3: Безопасное удаление (не выбрасывает исключение)
public void deleteFileSafe() throws IOException {
Files.deleteIfExists(Paths.get("myfile.txt"));
}
Работа с папками (директориями)
import java.io.File;
import java.nio.file.Files;
import java.nio.file.DirectoryStream;
import java.nio.file.Paths;
public class DirectoryOperations {
// Создание папки
public void createDirectory() throws IOException {
Files.createDirectories(Paths.get("mydir/subdir"));
}
// Список файлов в папке
public void listFiles() throws IOException {
try (DirectoryStream<Path> stream =
Files.newDirectoryStream(Paths.get("."))) {
for (Path file : stream) {
System.out.println(file.getFileName());
}
}
}
// Рекурсивный обход файлов
public void walkFileTree() throws IOException {
Files.walk(Paths.get("."))
.filter(Files::isRegularFile)
.forEach(System.out::println);
}
// Удаление папки
public void deleteDirectory() throws IOException {
Files.walk(Paths.get("mydir"))
.sorted(Comparator.reverseOrder())
.forEach(path -> {
try {
Files.delete(path);
} catch (IOException e) {
e.printStackTrace();
}
});
}
}
Получение информации о файле
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
public class FileInfo {
public static void main(String[] args) throws IOException {
Path path = Paths.get("myfile.txt");
// Существует ли файл
boolean exists = Files.exists(path);
System.out.println("Существует: " + exists);
// Это файл или папка
boolean isFile = Files.isRegularFile(path);
boolean isDirectory = Files.isDirectory(path);
System.out.println("Файл: " + isFile + ", Папка: " + isDirectory);
// Размер файла
long size = Files.size(path);
System.out.println("Размер: " + size + " байт");
// Права доступа
boolean readable = Files.isReadable(path);
boolean writable = Files.isWritable(path);
System.out.println("Читаемый: " + readable + ", Записываемый: " + writable);
// Детальная информация
BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
System.out.println("Создан: " + attrs.creationTime());
System.out.println("Изменён: " + attrs.lastModifiedTime());
}
}
Копирование и перемещение файлов
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
// Копирование
Files.copy(
Paths.get("source.txt"),
Paths.get("destination.txt"),
StandardCopyOption.REPLACE_EXISTING
);
// Перемещение/переименование
Files.move(
Paths.get("oldname.txt"),
Paths.get("newname.txt"),
StandardCopyOption.REPLACE_EXISTING
);
Обработка исключений при работе с файлами
try {
List<String> lines = Files.readAllLines(Paths.get("file.txt"));
System.out.println(lines);
} catch (FileNotFoundException e) {
System.err.println("Файл не найден: " + e.getMessage());
} catch (IOException e) {
System.err.println("Ошибка при чтении файла: " + e.getMessage());
}
Try-with-resources (рекомендуется)
Автоматически закрывает ресурсы:
try (BufferedReader reader = new BufferedReader(
new FileReader("file.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
Лучшие практики
- Используй java.nio.file вместо java.io — это новый стандарт
- Всегда используй try-with-resources — гарантирует закрытие ресурсов
- Обрабатывай исключения — работа с файлами часто вызывает IOException
- Используй абсолютные пути где возможно — избегает проблем с относительными путями
- Проверяй наличие файла перед операциями — используй Files.exists()
- Для больших файлов используй потоки — Files.lines() или BufferedReader
Работа с файлами — основной навык в Java разработке, используемый в логировании, обработке данных и конфигурировании приложений.