Использование библиотеки rsync4j, Java-реализации инструмента rsync для Linux, как синхронизировать данные из удаленного каталога с локальным каталогом - PullRequest
0 голосов
/ 26 октября 2018

Мне нужна функциональность, подобная функциональности инструмента rsync linux в моей Java-программе.Для этого я выбрал библиотеку rsync4j .

Используя их документацию , я написал следующую программу:

import com.github.fracpete.processoutput4j.output.ConsoleOutputProcessOutput;
import com.github.fracpete.rsync4j.RSync;

public class MainClass {

    public static void main(String [] args) {

        System.out.println("Started");//check

        RSync rsync = new RSync()
            .source("/home/arth/DataSourceFolder/a.txt")
            .destination("/home/arth/DataDestinationFolder/")
            .recursive(true);
            // or if you prefer using commandline options:
            // rsync.setOptions(new String[]{"-r", "/one/place/", "/other/place/"});
            CollectingProcessOutput output = null;
            try {
                    System.out.println("Inside try");
                    output = rsync.execute();
                    System.out.println("End of try");
            } catch (Exception e) {
                    e.printStackTrace();
            }
            System.out.println(output.getStdOut());
            System.out.println("Exit code: " + output.getExitCode());
            if (output.getExitCode() > 0)
                System.err.println(output.getStdErr());
      }
}

Во фрагменте, на локальном компьютере, файл a.txt копируется из одного местадругому.Это работает отлично.Файл успешно копируется, когда я запускаю его, и вот вывод:

Started

Inside try

End of try

Exit code: 0

Но мне нужно синхронизировать локальный каталог с каталогом, лежащим на удаленном хосте / машине.Когда я попытался сделать это, используя простую команду rsync из терминала, используя следующую команду

rsync remoteUserName@23.24.25.244:/home/beth/remoteFolder/a.png /home/arth/DataSourceFolder

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

Но проблема, когда я использую вышеупомянутую программу Java для выполнения той же операции, заменив строки # 11 и 12 на:

.source("remoteUserName@23.24.25.244:/home/beth/remoteFolder/a.png")
.destination("/home/arth/DataDestinationFolder/")

Программа застревает после печати Started в консоли.Не выдается ни исключение, ни программа.

Вопрос в том, как мне исправить эту проблему?

1 Ответ

0 голосов
/ 30 апреля 2019

(старый пост, я знаю, но здесь все идет ...) Библиотека rsync4j не разрешает взаимодействие.В вашем случае базовый двоичный файл rysnc запрашивает пароль в процессе, созданном библиотекой Java, но никогда не получает его.Вы должны иметь возможность использовать формат USER:PASSWORD@HOST/DIR для достижения своей цели.

...