Как переместить все файлы из каталога (включая подкаталоги) в указанный каталог c без подкаталогов в целевом объекте, используя верблюжий маршрут по FTP? - PullRequest
0 голосов
/ 07 августа 2020

Поскольку я новичок в Apache -Camel , я остановился на варианте использования. Я хочу добиться перемещения всех файлов в указанный каталог c без подкаталогов в целевом объекте, используя маршрут верблюда,

, например -

SourceDirectory / file1. xml SourceDirectory / subDir1 / file2. xml SourceDirectory / subDir2 / file3. xml SourceDirectory / subDir3 / subDir4 / file4. xml

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

destDir / file1. xml destDir / файл2. xml destDir / file3. xml destDir / file4. xml

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

String src="ftp://username:password@host/srcDir/";
String destDir="ftp://username:password@host/destDir/";
fromUri = src+"?recursive=true&delete=true";
        
from(fromUri)
.to(destDir);

Для этого в настоящее время я использую ftp-клиент

private void moveOverFTP(String from, String to) {
        FTPClient ftpClient = new FTPClient();
        try {
            URL url = new URL(from);
            String[] info = url.getUserInfo().split(":");

            ftpClient.connect(url.getHost());
            ftpClient.login(info[0], info[1]);

            String srcFolderPath = url.getPath();
            String targetFolder = new URL(to).getPath();
            move(srcFolderPath, targetFolder, ftpClient);
            
            ftpClient.logout();
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }

    }
    
    private void move(String srcFolderPath, String targetFolder, FTPClient ftpClient) throws IOException {
        FTPFile[] files = ftpClient.listFiles(srcFolderPath);
        for (FTPFile file : files) {
            String fileName = file.getName();
            if (file.isDirectory()) {
                String tempSrcPath = srcFolderPath + fileName + "/";
                move(tempSrcPath, targetFolder, ftpClient);
                // delete empty directory
                ftpClient.removeDirectory(tempSrcPath);
            } else {
                System.out.println("Moving "+srcFolderPath + fileName +" to = "+ targetFolder);
                ftpClient.rename(srcFolderPath + fileName, targetFolder + fileName);
            }
        }
    }

Любая помощь в достижении этого в самом маршруте будет оценена! Заранее благодарю!

1 Ответ

1 голос
/ 07 августа 2020

Похоже, вы ищете вариант flatten, ie.:

from(fromUri)
  .to(destDir + "?flatten=true");
...