Как скопировать или переместить файл
Короткий ответ
Пусть есть файл photo.jpg. Files.copy() копирует его, Files.move() — перемещает или переименовывает:
void main() throws IOException {
Files.copy(Path.of("photo.jpg"), Path.of("photo-backup.jpg"));
Files.move(Path.of("photo.jpg"), Path.of("holiday.jpg"));
IO.println(Files.exists(Path.of("photo.jpg")));
IO.println(Files.exists(Path.of("photo-backup.jpg")));
IO.println(Files.exists(Path.of("holiday.jpg")));
}Результат:
false
true
trueПерезаписать существующий
По умолчанию копирование в существующий файл выбрасывает исключение. Опция REPLACE_EXISTING разрешает перезапись:
void main() throws IOException {
Files.writeString(Path.of("backup.jpg"), "old");
Files.copy(Path.of("photo.jpg"), Path.of("backup.jpg"), StandardCopyOption.REPLACE_EXISTING);
IO.print(Files.readString(Path.of("backup.jpg")));
}Результат:
image dataВ другую папку
resolve() добавляет имя файла к пути папки:
void main() throws IOException {
Path source = Path.of("photo.jpg");
Path archive = Files.createDirectories(Path.of("archive"));
Path target = Files.move(source, archive.resolve(source.getFileName()));
IO.println(target.toString().replace('\\', '/'));
}Результат:
archive/photo.jpgЧастая ошибка
Копировать без опции, когда файл назначения уже есть:
void main() throws IOException {
Files.writeString(Path.of("backup.jpg"), "old");
Files.copy(Path.of("photo.jpg"), Path.of("backup.jpg"));
}Результат:
Exception in thread "main" java.nio.file.FileAlreadyExistsException: backup.jpgФункции из этого ответа
- Path.of() — Создаёт объект Path — путь к файлу или папке.