Как рекурсивно скопировать все файлы и подкаталоги из одного каталога в другой

Обновлено: 02.07.2024

Здравствуйте, ребята, в Java обычно требуется скопировать весь каталог с подкаталогами и файлами, но это не так просто, особенно до Java 7. JDK 7 представил некоторые новые методы файловых утилит как часть Java NIO 2, которые мы будем использовать в этой статье, чтобы показать вам, как рекурсивно скопировать весь каталог с подкаталогами и файлами в Java. Я также покажу вам, как вы можете использовать Apache Commons, если вы не используете Java 7 или более позднюю версию. По сути, вы можете скопировать файл или каталог, используя метод copy(Path, Path, CopyOption. ). Копия завершается ошибкой, если целевой файл существует, если не указана опция REPLACE_EXISTING.

Этот метод можно использовать для копирования каталогов, но файлы внутри каталога не копируются, поэтому новый каталог пуст, даже если исходный каталог содержит файлы. Это главное, что нужно помнить, потому что многие разработчики просто вызывают этот метод и думают, что с ним покончено. Они не удосуживаются проверить, пуст каталог или нет.

Чтобы скопировать весь каталог со всеми его подкаталогами и файлами, вам необходимо рекурсивно скопировать каждый элемент, если вы не достигли вершины каталога. При копировании символической ссылки копируется цель ссылки. Если вы хотите скопировать саму ссылку, а не содержимое ссылки, укажите опцию NOFOLLOW_LINKS или REPLACE_EXISTING.


В следующем коде Java показано, как использовать метод копирования:

импортировать статический java.nio.file.StandardCopyOption.*;
.
Files.copy(источник, цель, REPLACE_EXISTING);

Позже я покажу вам полный пример рекурсивного копирования всего каталога со всем его содержимым, но если вы хотите узнать больше о служебном классе Java NIO и Files, я предлагаю вам пройти всесторонний курс Java на Udemy. Это также один из самых современных курсов для изучения Java, в котором рассматриваются новые функции из последних выпусков Java.

Пример copyDirectory из Apache Commons

Если вы считаете, что описанный выше метод слишком сложен для использования этого метода, вы также можете попробовать вместо этого использовать метод copyDirectory(File srcDir, File destDir) из библиотеки ввода-вывода Apache Commons.

Вы можете использовать этот метод из Apache Commons, когда копируете весь каталог в новое место и сохраняете даты файлов. Этот метод копирует указанный каталог и все его дочерние каталоги и файлы в указанное место назначения. Местом назначения является новое местоположение и имя каталога.

Каталог назначения создается, если он не существует. Если целевой каталог существует, то этот метод объединяет источник с целевым, причем источник имеет приоритет.

Примечание. Этот метод пытается сохранить дату/время последнего изменения файлов с помощью File.setLastModified(long) , однако успех этих операций не гарантируется.

Если операция модификации не удалась, индикация не предоставляется.

Параметры:
srcDir — существующий каталог для копирования, не должен быть нулевым
destDir — новый каталог, не должен быть нулевым


Если вы хотите узнать больше о классе File and Directory в Java, ознакомьтесь с фундаментальным курсом Java, например «Основы Java: язык Java на Pluralsight». Если вы не знаете, Pluralsight сделал все свои курсы бесплатными на один месяц в рамках своего бесплатного апрельского предложения. Если вы хотите учиться, это хороший шанс бесплатно присоединиться к Pluralsight.

Как рекурсивно скопировать каталог в Java с подкаталогами и файлами

Программа Java для копирования директории с файлами и подкаталогами

Вот полная программа Java для рекурсивного копирования каталога на Java с подкаталогами и файлами на Java:


Это все о том, как рекурсивно копировать каталог в Java с подкаталогами и файлами. Если вы используете Java 7, используйте метод Files.copy(), это просто и легко, и вам не нужно включать какую-либо стороннюю библиотеку, но если вы работаете на Java 6, вы можете либо использовать Apache Commons IO библиотеку и метод FileUtils.copy(), или вы можете написать собственную маршрутизацию с помощью FileChannel для копирования файлов из одной папки в другую на Java.

  • Как удалить каталог с файлами в Java? (пример)
  • Как скопировать непустой каталог в Java? (пример)
  • Как создать файл и каталог в Java? (решение)
  • Как прочитать ZIP-архив в Java? (решение)
  • 2 способа прочитать текстовый файл в Java? (пример)
  • Как добавить текст в существующий файл в Java (решение)
  • Как записать в файл с помощью BufferedWriter в Java?(пример)

Спасибо, что прочитали эту статью. Если вам понравилась эта статья, пожалуйста, поделитесь ею с друзьями и коллегами. Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте комментарий.


П. S. — Если вы ищете бесплатные курсы для изучения всех новых и важных функций Java, появившихся между Java 8 и Java 13, вы также можете просмотреть этот список онлайн-курсов по Java на Medium. Он включает короткие специализированные курсы для изучения новых функций JDK от JDK 8 до JDK 13.

В зависимости от операционной системы вашего компьютера и от того, где вы хотите выполнить копирование, существует несколько способов скопировать каталог или папку. Выберите ссылку ниже для вашей операционной системы или места, где вы хотите выполнить копирование.

Майкрософт Windows

Чтобы скопировать папку в Microsoft Windows, выполните следующие действия. При копировании папки в Windows копируется все содержимое папки, включая все файлы и подкаталоги.

  1. Нажмите клавишу Windows + E, чтобы открыть Проводник.
  2. Найдите и выделите папку, которую хотите скопировать.

Скопированный файл можно вставить в любое место на компьютере, включая рабочий стол, другую папку или диск.

Вы также можете использовать сочетания клавиш для копирования и вставки файлов на компьютер. Например, вы можете выделить любой файл и нажать Ctrl + C, чтобы скопировать файл. После копирования вы можете перейти туда, куда хотите вставить файл, а затем нажать Ctrl + V, чтобы вставить файл.

Командная строка MS-DOS и Windows

Чтобы скопировать каталог в MS-DOS, используйте команду xcopy. Ниже приведен базовый пример каждого из шагов, чтобы сделать это в MS-DOS. Если вам нужна дополнительная информация о команде xcopy или дополнительные примеры, см. указанную выше страницу команды xcopy.

По умолчанию базовая команда xcopy копирует файлы только в каталог, указанный вами в качестве исходного каталога. Вы также должны использовать параметр /E для копирования подкаталогов в исходный каталог.

Скопировать каталог и содержимое

В приведенном выше примере каталог "example" копируется в новый каталог с именем "example2".

Скопировать содержимое каталога в другой каталог

  1. Перейдите в каталог, в который вы хотите скопировать каталоги и подкаталоги. В приведенном ниже примере мы переходим в каталог temp2 с помощью команды cd.
    1. Оказавшись в каталоге, используйте команду xcopy, чтобы скопировать подкаталоги и содержимое другого каталога. В приведенном ниже примере мы копируем содержимое «temp3» в каталог «temp2». Имейте в виду, что это не копирует фактический каталог «temp3». Копируются только файлы и подкаталоги в каталоге temp3.

    После выполнения вышеуказанных шагов все нужно скопировать в папку temp2.

    Скопировать каталог с пробелом в имени

    При работе с пробелом в файле или каталоге вы всегда заключаете его в кавычки.

    В приведенном выше примере каталог "test" копируется в новый каталог с именем "space test".

    Как скопировать каталог на другой диск

    В приведенном выше примере каталог "test" на диске C: будет скопирован в каталог "test" на диске D:.

    Linux и Unix

    Чтобы скопировать каталог со всеми подкаталогами и файлами, используйте команду cp. Ниже приведен пример команды использования команды cp для копирования файлов. Дополнительную информацию об этой команде и другие примеры можно найти по приведенной выше ссылке cp.

    В приведенном выше примере команда cp скопирует все файлы, каталоги и подкаталоги из каталога /home/hope/files в каталог /home/hope/backup.

    Копирование файла или папки означает создание нового файла с дублирующимся содержимым, как в существующем файле.

    Иногда нам нужно скопировать файлы или папки, а не программу резервного копирования. Файлы можно копировать с тем же именем или изменить имя.

    Копирование файла, папки или каталога — простая и основная задача в операционной системе Linux. Команды переименования, удаления или копирования используются в качестве повседневных операций при работе с интерфейсом командной строки.

    Несмотря на то, что для копирования файлов существует несколько команд, команды «cp» и «rsync» являются широко используемыми простейшими подходами.

    Как копировать файлы с помощью команды «cp» в Linux:

    Команда «cp» — одна из наиболее часто используемых команд для выполнения операции копирования. С помощью этой команды вы можете копировать файлы или папки из источника в место назначения, то есть в один каталог.

    Синтаксис команды «cp»:

    Давайте рассмотрим пример, чтобы лучше понять инструмент команды «cp».

    В домашнем каталоге создайте папку «temp» с текстовым файлом с именем «text_file1.txt» и добавьте в нее произвольное содержимое.


    Скопируйте файл с тем же именем:

    Чтобы скопировать каталог с файлом text_file1.txt с тем же именем, откройте терминал и введите указанную команду "cp" с правильным путем.

    Получить путь к папке, щелкнув файл правой кнопкой мыши и перейти к параметру «Свойства» (это самый простой способ получить ссылку на путь).


    Откроется диалоговое окно с полным путем к текстовому файлу:


    Используйте этот путь с командой «cp» для копирования файла:


    Эта команда скопирует файл «text_file1.txt» в папку «temp2».

    Чтобы проверить это, введите команду «ls» в терминале:


    Скопируйте файл с другим именем:

    Чтобы скопировать файл в текущий рабочий каталог с другим именем, введите следующую команду «cp» с указанием местоположения файла:


    Проверьте это с помощью команды «ls»:


    Скопировать несколько файлов с помощью команды «cp»:

    Чтобы скопировать несколько файлов с помощью команды «cp», перейдите в терминал в каталог, в котором сохранены файлы, а затем запустите команду «cp», указав имена файлов, которые вы хотите скопировать, и путь назначения.

    $ cd/home/wardah/temp

    $ cp text_file1.txt text_file2.txt text_file3.txt /home/wardah/temp2


    Выполните указанную команду, чтобы проверить, успешно ли скопированы файлы:


    Вышеупомянутые сценарии показывают, как скопировать один или выбранный файл в каталог. Теперь используйте подстановочный знак (*), чтобы скопировать имеющиеся файлы из одного каталога в любой другой конкретный каталог.

    Проверим, как это работает:

    Выполните команду «ls», чтобы проверить, сколько файлов существует во временном каталоге:


    Вместо того, чтобы указывать все имена файлов в терминале, используйте подстановочный знак (*) с путем к каталогу, чтобы скопировать все файлы в место назначения:


    Теперь снова запустите команду «ls», чтобы проверить, все ли файлы скопированы в каталог «temp2»:


    Как копировать файлы с помощью команды «rsync» в Linux:

    Команда rsync — еще один универсальный инструмент Linux для синхронизации и копирования файлов и каталогов как локально, так и удаленно.

    Синтаксис команды «rsync» для копирования файлов:

    Это встроенный инструмент во многих дистрибутивах Linux. Однако, если в вашей системе его нет, установите его, выполнив следующую команду:


    Чтобы скопировать файл из одного места в другое, выполните следующую команду:


    Для подтверждения введите:


    Чтобы скопировать все файлы каталога в другое место, введите следующую команду:


    («-a» с командой «rsync» используется для рекурсивного копирования каталогов)

    Вот две концепции:

    Если вы добавите косую черту (/) в конце пути, содержимое исходного каталога будет скопировано в целевой каталог, как показано на рисунке:


    Но если вы его не добавите, он скопирует исходный каталог в целевой каталог, например:


    Приведенная выше команда скопирует каталог «dir1» в каталог «dir2».


    Вывод:

    Копирование файла или каталога — это основная команда, с которой можно работать. Его можно использовать несколько раз при использовании операционной системы Linux.

    В этом руководстве рассмотрены два простейших подхода: команда «cp» и команда «rsync». С помощью этих команд мы научились копировать один файл, несколько файлов и даже копировать один каталог в другой.

    Об авторе

    Варда Батул

    Я дипломированный инженер-программист и целеустремленный писатель Linux. Я также люблю читать последние книги по Linux. Кроме того, в свободное время я люблю читать книги по личностному развитию.

    Модуль Shutil в Python предоставляет множество функций высокоуровневых операций над файлами и коллекциями файлов. Он входит в стандартные служебные модули Python. Этот модуль помогает автоматизировать процесс копирования и удаления файлов и каталогов.
    Метод shutil.copytree() рекурсивно копирует все дерево каталогов с корнем в источнике (src) в каталог назначения. Целевой каталог с именем (dst) не должен уже существовать. Он будет создан во время копирования. Права доступа и время доступа к каталогам копируются с помощью функции copystat(), а отдельные файлы копируются с помощью Shutil.copy2().

    Синтаксис: shutdown.copytree(src, dst, symlinks = False, ignore = None, copy_function = copy2, ignore_dangling_symlinks = False)
    Параметры:
    src: строка, представляющая путь к исходный каталог.
    dest: строка, представляющая путь к месту назначения.
    symlinks (необязательно): этот параметр принимает значение True или False, в зависимости от того, какие метаданные исходных ссылок или связанных ссылок будут скопированы в новое дерево.
    ignore (необязательно): если задано ignore, это должен быть вызываемый объект, который получит в качестве аргументов каталог, посещаемый функцией copytree(), и список его содержимого, возвращенный функцией os.listdir().
    функция_копирования (необязательно): значением по умолчанию для этого параметра является копия2. Мы можем использовать другую функцию копирования, например, copy() для этого параметра.
    ignore_dangling_symlinks (необязательно): значение этого параметра, если установлено значение True, используется, чтобы поместить молчание в исключение, возникающее, если файл, на который указывает символическая ссылка, не существует.
    Возвращаемое значение: этот метод возвращает строку который представляет собой путь к вновь созданному каталогу.

    Пример: предположим, что каталог выглядит так.


    < /p>

    Мы хотим скопировать папку «src» в новую папку «dst». Ниже приведена реализация.

    Читайте также: