Рубрики
Без рубрики

Копирование каталога на Java

Узнайте, как скопировать каталог с помощью основных функций Java и сторонних библиотек

Автор оригинала: Maja Joksovic.

1. Введение

В этом коротком учебнике мы увидим, как скопировать каталог на Java, включая все его файлы и поднаправления. Этого можно достичь с помощью основных java-функций или сторонних библиотек.

2. Использование API java.nio

Java НИО был доступен с Java 1.4. Java 7 представила НИО 2 что принесло много полезных функций, таких как лучшая поддержка для обработки символических ссылок, доступ к атрибутам файлов. Это также предоставило нам такие классы, как Путь , Пути , и Файлы что значительно облегчило манипуляцию файловой системой.

Давайте продемонстрируем такой подход:

public static void copyDirectory(String sourceDirectoryLocation, String destinationDirectoryLocation) 
  throws IOException {
    Files.walk(Paths.get(sourceDirectoryLocation))
      .forEach(source -> {
          Path destination = Paths.get(destinationDirectoryLocation, source.toString()
            .substring(sourceDirectoryLocation.length()));
          try {
              Files.copy(source, destination);
          } catch (IOException e) {
              e.printStackTrace();
          }
      });
}

В этом примере мы ходили файл дерево коренится в данном каталоге источника, используя Файлы.прогулка () и сослался Файлы.копия () для каждого файла или каталога мы нашли в каталоге источника.

3. Использование java.io API

Java 7 стал поворотным моментом с точки зрения управления файловой системой, так как он представил много новых удобных функций.

Однако, если мы хотим оставаться совместимыми со старыми версиями Java, мы можем скопировать каталог с помощью рекурсии и java.io.File особенности :

private static void copyDirectory(File sourceDirectory, File destinationDirectory) throws IOException {
    if (!destinationDirectory.exists()) {
        destinationDirectory.mkdir();
    }
    for (String f : sourceDirectory.list()) {
        copyDirectoryCompatibityMode(new File(sourceDirectory, f), new File(destinationDirectory, f));
    }
}

В этом случае Мы создадим каталог в каталоге назначения для каждого каталога в дереве исходных каталогов . Тогда мы вызовем copyDirectoryCompatibityMode () метод:

public static void copyDirectoryCompatibityMode(File source, File destination) throws IOException {
    if (source.isDirectory()) {
        copyDirectory(source, destination);
    } else {
        copyFile(source, destination);
    }
}

Кроме того, давайте посмотрим, как скопировать файл с помощью FileInputStream и FileOutputStream :

private static void copyFile(File sourceFile, File destinationFile) 
  throws IOException {
    try (InputStream in = new FileInputStream(sourceFile); 
      OutputStream out = new FileOutputStream(destinationFile)) {
        byte[] buf = new byte[1024];
        int length;
        while ((length = in.read(buf)) > 0) {
            out.write(buf, 0, length);
        }
    }
}

4. Использование Apache Commons IO

ИО- Apache Commons имеет много полезных функций, таких как классы утилит, файловых фильтров и компараторов файлов . Здесь мы будем использовать ФайлУтилс которые обеспечивают методы для легкой манипуляции файлами и каталогами, т.е. чтения, перемещения, копирования.

Давайте добавим общий-io к нашему пом.xml файл:


    commons-io
    commons-io
    2.8.0

Наконец, давайте скопировать каталог с помощью этого подхода:

public static void copyDirectory(String sourceDirectoryLocation, String destinationDirectoryLocation) throws IOException {
    File sourceDirectory = new File(sourceDirectoryLocation);
    File destinationDirectory = new File(destinationDirectoryLocation);
    FileUtils.copyDirectory(sourceDirectory, destinationDirectory);
}

Как показано в предыдущем примере, Apache Commons IO делает все это намного проще, так как нам нужно только позвонить FileUtils.copyПрямая () метод .

5. Заключение

Эта статья проиллюстрировала, как скопировать каталог на Java. Полные образцы кода доступны более на GitHub .