Yeah, like most people have already pointed out, executing an underlying commandline execution from your Java program (where rsync is already installed on the computers in question) is the best route. What I do is...
// Currently uses passwordless SSH keys to login to sword
String[] cmd = new String[]{"rsync", "-r", USER + "@" + HOST + ":" + REMOTE_FILE_ROOT, LOCAL_FILE_ROOT};
ProcessBuilder pb = new ProcessBuilder(cmd);
Process p = pb.start();
int val = p.waitFor();
if (val != 0) {
throw new Exception("Exception during RSync; return code = " + val);
}
I actually run my rsync command as a cron-style job in my Java programs using the cron4j library.