使用java实现windows与linux之间的文件传输

最近公司的一个小项目需要在linux远端服务器上运行然后获取结果到本地用户目录下,当时为这个搜遍了百度,想破了脑袋。
记录一下,万一以后需要用,可以少走一些弯路。
环境准备:

- JDK
- pscp.exe

我尝试过的方法

在linux上执行

  • 获取本机的ip,通过pscp到本机的路径
    –想法很美好,但是没有成功,不知道原因。

  • 在linux上安装sz rz
    – 这个可能是因为我用putty连接到远端的原因,安装成功可以运行,但是没有跳出图形化界面而是出现乱码

  • 在windows与linux之间通过ftp传输
    –公司的服务器,公司的电脑,不让连ftp

然后觉得如果在linux上运行,很难获取到本地的路径,需要放到用户目录下,不能写死。

在本地客户端执行

  • 通过运行cmd调用pscp命令
    –这里就涉及到pscp之后需要输入密码,这样一个交互的动作
    –用过getInputStream,然后write
    –连不上
    –再加个flush()
    –还是连不上
    –很绝望

然后我就去百度不用输入密码的办法,还真的找到了解决办法。

@mipademiao
                        Process process = Runtime.getRuntime().exec(
                                "cmd.exe /c pscp -r -l "+username()
                                +" -pw "+password+" -P "+port+" "
                                +ip+":"+remotePath+" "+targetPath);
                        BufferedReader bufferedReader = new BufferedReader(
                                new InputStreamReader(process.getInputStream()));
                        BufferedReader errReader = new BufferedReader(
                                new InputStreamReader(process.getErrorStream()));
                        while ((err = errReader.readLine()) != null)
                                System.out.println(err);
                        while ((str = bufferedReader.readLine()) != null)
                                System.out.println(str);
                        process.destroy();

详细解释下命令行的内容

“cmd.exe /c pscp -r -l “+username+” -pw “+password+” -P “+port+” “+ip+”:”+remotePath+” “+targetPath);

  • cmd.exe /c 调用cmd
  • pscp 运行pscp
  • -r 类似scp/cp中的-r,可以把整个文件夹下载下来,如果去掉就可以下载单个文件。
  • -l 用户名
  • -pw 密码
  • -P port端口,注意这里是大写的P
  • ip 你要下载文件所在的远端服务器ip
  • remotePath 你要下载文件所在的路径
  • targetPath 你希望文件存储的本地路径
展开阅读全文

没有更多推荐了,返回首页