将远程服务器目录复制到本地计算机

时间:2017-09-06 18:54:04

标签: java file copy directory xcopy

我们有一个架构,其中有数百个Java组件部署在多个服务器上(40多个)。业务流程涉及将数据从一个组件传递到另一个组件。每个组件都会吐出日志。每次出现问题时,我都要继续查看各种服务器日志目录(全部映射为不同的网络驱动器)并查看日志文件。

我想知道最快的方法是从40多台服务器上的所有这些文件夹中复制并复制到我的本地计算机。我想创建一个可以执行此操作的程序/脚本。我可以在开始研究问题之前运行此脚本。

我编写了自己的java程序并使用了FileUtils.copyDirectory。在循环中调用40个奇数源目录和我的本地目标目录。不幸的是,如果要写入源文件,FileUtils.copyDirectory会抛出异常。

如果我能够实施一个解决方案,这将是一个巨大的帮助,以便我的问题搜索过程跨越这些文件。

这是在Windows上。

我熟悉java。可以尝试其他语言。请不要购买任何产品。这只是一个开发人员黑客,我正在考虑开发以解决我的问题。

1 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

public static int extraction()
{
    String hostname = "*server host name*";

    String username = "*enter username*";
    String password = "*enter password*";

    String copyFrom = "*server path for example /home/file/abc.png *";
    String copyTo = "*local path for example C:\\Documents *"; 

    JSch jsch = new JSch();
    Session session = null;
    System.out.println("Trying to connect.....");
    try 
    {
        session = jsch.getSession(username, hostname, 22);
        session.setConfig("StrictHostKeyChecking", "no");
        session.setPassword(password);
        session.connect(); 
        Channel channel = session.openChannel("sftp");
        channel.connect();
        ChannelSftp sftpChannel = (ChannelSftp) channel; 
        sftpChannel.get(copyFrom, copyTo);
        sftpChannel.exit();
        session.disconnect();

    } 

    catch (JSchException e) 
    {
        e.printStackTrace();  
    } 
    catch (SftpException e) 
    {
        e.printStackTrace();
    }
    System.out.println("Done !!");
    return 0;
}

这是我用来从单一来源获取服务器日志文件的方法,但可以重新编写以获取所需数量的方法。请原谅格式,因为这是我使用的格式并且觉得舒服。

使用的参考链接:https://vinaydvd.wordpress.com/2013/12/08/copying-files-from-a-remote-linux-server-to-local-windows-server-using-java/