Как переместить файлы из родительского каталога в подкаталог в java? - PullRequest
0 голосов
/ 02 августа 2020

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

Пожалуйста, найдите мой код ниже:

       private static void copyFolder(File sourceFolder, File destinationFolder) throws IOException
   {
    //Check if sourceFolder is a directory or file
    //If sourceFolder is file; then copy the file directly to new location
    if (sourceFolder.isDirectory()) 
    {
        //Verify if destinationFolder is already present; If not then create it
        if (!destinationFolder.exists()) 
        {
            destinationFolder.mkdir();
            System.out.println("Directory created :: " + destinationFolder);
        }
         
        //Get all files from source directory
        String files[] = sourceFolder.list();
         
        //Iterate over all files and copy them to destinationFolder one by one
        for (String file : files) 
        {
            File srcFile = new File(sourceFolder, file);
            File destFile = new File(destinationFolder, file);
             
            //Recursive function call
            copyFolder(srcFile, destFile);
        }
    }
    else
    {
        //Copy the file content from one place to another 
        Files.copy(sourceFolder.toPath(), destinationFolder.toPath(), StandardCopyOption.REPLACE_EXISTING);
        System.out.println("File copied :: " + destinationFolder);
    }
  }
 }

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Вы можете использовать Files.walk для создания потока экземпляров Path, фильтрации файлов и копирования их в место назначения.

try(Stream<Path> pathStream = Files.walk(sourceFolder)) {
    pathStream
           .filter(path -> path.toFile().isFile())
           .forEach(path -> {
                Path destinationFile = Paths.get(destinationFolder.toPath().toString(),
                        path.getFileName().toString());
                copyFile(path, destinationFile);
            });
}

private static void copyFile(Path src, Path dst) {
    try {
        Files.copy(src, dst, StandardCopyOption.REPLACE_EXISTING);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
0 голосов
/ 02 августа 2020

Я добавил новый параметр в copyFolder. Если установлено значение false, копируются только файлы, а не папка:

public static void main(String[] args) throws IOException {
    // Source directory which you want to copy to new location
    File sourceFolder = new File("/workspace/files/");

    // Target directory where files should be copied
    File destinationFolder = new File("/Workspace/Out/");

    // Call Copy function
    copyFolder(sourceFolder, destinationFolder, false);
}

/**
 * This function recursively copy all the sub folder and files from sourceFolder
 * to destinationFolder
 */
private static void copyFolder(File sourceFolder, File destinationFolder, boolean subFolders) throws IOException {
    // Check if sourceFolder is a directory or file
    // If sourceFolder is file; then copy the file directly to new location
    if (sourceFolder.isDirectory()) {
        // Verify if destinationFolder is already present; If not then create it
        if (!destinationFolder.exists()) {
            destinationFolder.mkdir();
            System.out.println("Directory created :: " + destinationFolder);
        }

        // Get all files from source directory
        String files[] = sourceFolder.list();

        // Iterate over all files and copy them to destinationFolder one by one
        for (String file : files) {
            File srcFile = new File(sourceFolder, file);
            File destFile = new File(destinationFolder, file);

            // Recursive function call
            if (subFolders) {
                copyFolder(srcFile, destFile, subFolders);
            }
        }
    } else {
        // Copy the file content from one place to another
        Files.copy(sourceFolder.toPath(), destinationFolder.toPath(), StandardCopyOption.REPLACE_EXISTING);
        System.out.println("File copied :: " + destinationFolder);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...