/
pchelkin_g
/
homework6
Обзор
Документация
Войти
/
pchelkin_g
/
homework6
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
MyIOExample
src/main/java/sbp/io/MyIOExample.java
267 строк
13 KB
pchelking
MyIOExample
23 дек 2025, 01:49
23 дек 2025, 01:49
d1b23f5
Код
Авторство
О чём код?
package sbp.io; import java.io.*; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; /** * Класс для работы с файлами и директориями с использованием NIO.2 API. * Предоставляет методы для проверки свойств файлов и копирования файлов различными способами. */ public class MyIOExample { /** * Создать объект класса {@link java.nio.file.Path}, проверить существование и чем является (файл или директория). * Если сущность существует, то вывести в консоль информацию: * - абсолютный путь * - родительский путь * Если сущность является файлом, то вывести в консоль: * - размер * - время последнего изменения * Необходимо использовать класс {@link java.nio.file.Path} * * @param fileName - имя файла или путь к файлу * @return - true, если файл успешно обработан */ public boolean workWithFile(String fileName) { try { Path path = Paths.get(fileName); if (!Files.exists(path)) { System.out.println("Файл или директория не существует: " + fileName); return false; } // Вывод абсолютного пути Path absolutePath = path.toAbsolutePath(); System.out.println("Абсолютный путь: " + absolutePath); // Вывод родительского пути Path parentPath = path.getParent(); if (parentPath != null) { System.out.println("Родительский путь: " + parentPath.toAbsolutePath()); } else { System.out.println("Родительский путь: корневая директория"); } // Проверка, является ли файлом или директорией if (Files.isDirectory(path)) { System.out.println("Тип: Директория"); } else if (Files.isRegularFile(path)) { System.out.println("Тип: Файл"); // Получение размера файла long size = Files.size(path); System.out.println("Размер файла: " + size + " байт (" + String.format("%.2f", size / 1024.0) + " КБ)"); // Получение времени последнего изменения BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class); Instant lastModifiedTime = attrs.lastModifiedTime().toInstant(); LocalDateTime lastModified = LocalDateTime.ofInstant(lastModifiedTime, ZoneId.systemDefault()); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); System.out.println("Время последнего изменения: " + lastModified.format(formatter)); } else { System.out.println("Тип: Символическая ссылка или другой тип"); } return true; } catch (InvalidPathException e) { System.err.println("Некорректный путь: " + fileName); return false; } catch (IOException e) { System.err.println("Ошибка при чтении атрибутов файла: " + e.getMessage()); return false; } catch (SecurityException e) { System.err.println("Отказано в доступе: " + e.getMessage()); return false; } } /** * Метод должен создавать копию файла. * Использует NIO.2 API {@link java.nio.file.Files#copy} для эффективного копирования. * * @param sourceFileName - имя исходного файла * @param destinationFileName - имя копии файла * @return - true, если файл успешно скопирован */ public boolean copyFile(String sourceFileName, String destinationFileName) { try { Path sourcePath = Paths.get(sourceFileName); Path destinationPath = Paths.get(destinationFileName); // Проверка существования исходного файла if (!Files.exists(sourcePath)) { System.err.println("Исходный файл не существует: " + sourceFileName); return false; } // Проверка, является ли исходный файлом if (!Files.isRegularFile(sourcePath)) { System.err.println("Исходный путь не является файлом: " + sourceFileName); return false; } // Создание родительских директорий для целевого файла Path parentDir = destinationPath.getParent(); if (parentDir != null && !Files.exists(parentDir)) { Files.createDirectories(parentDir); } // Копирование файла с заменой существующего Files.copy(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING); System.out.println("Файл успешно скопирован:"); System.out.println(" Из: " + sourcePath.toAbsolutePath()); System.out.println(" В: " + destinationPath.toAbsolutePath()); return true; } catch (InvalidPathException e) { System.err.println("Некорректный путь: " + e.getMessage()); return false; } catch (IOException e) { System.err.println("Ошибка при копировании файла: " + e.getMessage()); return false; } catch (SecurityException e) { System.err.println("Отказано в доступе: " + e.getMessage()); return false; } } /** * Метод должен создавать копию файла с использованием буферизованных потоков. * Использует NIO.2 API с буферизацией через {@link java.nio.file.Files#newInputStream} * и {@link java.nio.file.Files#newOutputStream}. * * @param sourceFileName - имя исходного файла * @param destinationFileName - имя копии файла * @return - true, если файл успешно скопирован */ public boolean copyBufferedFile(String sourceFileName, String destinationFileName) { try { Path sourcePath = Paths.get(sourceFileName); Path destinationPath = Paths.get(destinationFileName); // Проверка существования исходного файла if (!Files.exists(sourcePath)) { System.err.println("Исходный файл не существует: " + sourceFileName); return false; } if (!Files.isRegularFile(sourcePath)) { System.err.println("Исходный путь не является файлом: " + sourceFileName); return false; } // Создание родительских директорий для целевого файла Path parentDir = destinationPath.getParent(); if (parentDir != null && !Files.exists(parentDir)) { Files.createDirectories(parentDir); } // Буферизованное копирование с использованием NIO.2 try (InputStream in = Files.newInputStream(sourcePath); OutputStream out = Files.newOutputStream(destinationPath, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) { byte[] buffer = new byte[8192]; // 8KB буфер int bytesRead; while ((bytesRead = in.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } out.flush(); } System.out.println("Файл успешно скопирован с буферизацией:"); System.out.println(" Из: " + sourcePath.toAbsolutePath()); System.out.println(" В: " + destinationPath.toAbsolutePath()); return true; } catch (InvalidPathException e) { System.err.println("Некорректный путь: " + e.getMessage()); return false; } catch (IOException e) { System.err.println("Ошибка при копировании файла: " + e.getMessage()); return false; } catch (SecurityException e) { System.err.println("Отказано в доступе: " + e.getMessage()); return false; } } /** * Метод должен создавать копию текстового файла с использованием Reader и Writer. * Использует NIO.2 API для работы с текстовыми файлами через * {@link java.nio.file.Files#newBufferedReader} и {@link java.nio.file.Files#newBufferedWriter}. * * @param sourceFileName - имя исходного файла * @param destinationFileName - имя копии файла * @return - true, если файл успешно скопирован */ public boolean copyFileWithReaderAndWriter(String sourceFileName, String destinationFileName) { try { Path sourcePath = Paths.get(sourceFileName); Path destinationPath = Paths.get(destinationFileName); // Проверка существования исходного файла if (!Files.exists(sourcePath)) { System.err.println("Исходный файл не существует: " + sourceFileName); return false; } if (!Files.isRegularFile(sourcePath)) { System.err.println("Исходный путь не является файлом: " + sourceFileName); return false; } // Создание родительских директорий для целевого файла Path parentDir = destinationPath.getParent(); if (parentDir != null && !Files.exists(parentDir)) { Files.createDirectories(parentDir); } // Копирование текстового файла с использованием BufferedReader/BufferedWriter try (BufferedReader reader = Files.newBufferedReader(sourcePath); BufferedWriter writer = Files.newBufferedWriter(destinationPath, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) { char[] buffer = new char[8192]; // 8KB буфер для символов int charsRead; while ((charsRead = reader.read(buffer)) != -1) { writer.write(buffer, 0, charsRead); } writer.flush(); } System.out.println("Текстовый файл успешно скопирован:"); System.out.println(" Из: " + sourcePath.toAbsolutePath()); System.out.println(" В: " + destinationPath.toAbsolutePath()); return true; } catch (InvalidPathException e) { System.err.println("Некорректный путь: " + e.getMessage()); return false; } catch (IOException e) { System.err.println("Ошибка при копировании файла: " + e.getMessage()); return false; } catch (SecurityException e) { System.err.println("Отказано в доступе: " + e.getMessage()); return false; } } }