使用java实现windows与linux文件互相传递

来源:互联网 发布:matlab画图编程例题 编辑:程序博客网 时间:2024/06/06 10:51

最近公司的一个小项目需要在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.getText()+" -pw "+password.getText()+" -P "+port.getText()+" "+ip.getText()+":"+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 你希望文件存储的本地路径
阅读全文
1 0
原创粉丝点击