在Java中使用pscp命令上传单个或者多个文件(文件夹)到远程Linux服务器
来源:互联网 发布:淘宝哪些鞋店 编辑:程序博客网 时间:2024/04/28 03:27
package com.xx.util;import java.io.IOException;import java.util.Arrays;import java.util.List;import org.apache.commons.lang.StringUtils;/** * 在win端使用工具类上传文件和文件夹到Linux服务器的指定目录中 * @author Administrator * */public class TransferUtil {public static void execCommand(String localPath,String userName,String password,String remoteIp,String remotePath){ StringBuffer sb = new StringBuffer(); sb.append("cmd /C pscp"); if (StringUtils.isNotBlank(userName)) { sb.append(" -l ").append(userName); } else { System.out.println("远端用户名不能为空!"); return; } if (StringUtils.isNotBlank(password)) { sb.append(" -pw ").append(password); } else { System.out.println("远端密码不能为空!"); return; } sb.append(" -r -v");//支持目录的上传 if (StringUtils.isNotBlank(localPath)) { sb.append(" ").append(localPath); } else { System.out.println("本地路径不能为空!"); return; } if (StringUtils.isNotBlank(remoteIp)) { sb.append(" ").append(remoteIp).append(":"); } else { System.out.println("远端IP不能为空!"); return; } if (StringUtils.isNotBlank(remotePath)) { if (remotePath.indexOf('/') != -1) { sb.append(remotePath); } else { sb.append("/").append(remotePath); } } else { System.out.println("远端路径不能为空!"); return; } System.out.println("最终的执行命令为:"+sb.toString());try {Process process = Runtime.getRuntime().exec(sb.toString());new Thread(new ThreadUtil(process.getInputStream())).start();new Thread(new ThreadUtil(process.getErrorStream())).start();process.getOutputStream().close();int exitValue = process.waitFor();System.out.println("返回值:" + exitValue);} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}/** * 将多个目录下的文件上传到远端服务器上的指定目录中 * @param localFileList * @param userName * @param password * @param remoteIp * @param remotePath */public static void execMultiCommand(List<String> localFileList,String userName,String password,String remoteIp,String remotePath){if (null != localFileList && !localFileList.isEmpty()){for (String filePath : localFileList) {execCommand(filePath, userName, password, remoteIp, remotePath);}}}/** * 将多个目录下的文件上传到远端服务器上的指定目录中 * @param localFileArray * @param userName * @param password * @param remoteIp * @param remotePath */public static void execMultiCommand(String[] localFileArray,String userName,String password,String remoteIp,String remotePath){if (null != localFileArray){execMultiCommand(Arrays.asList(localFileArray), userName, password, remoteIp, remotePath);}}/** * 执行上传操作的方法,值传入待上传的文件列表 * @param localFileList */public static void execMultiCommand(List<String> localFileList){List<String[]> retList = FileUtils.getNginxConfig();for (String[] strings : retList) {execMultiCommand(localFileList, strings[0],strings[1],strings[2],strings[3]);}}/** * 执行上传操作的方法,值传入待上传的文件列表和远程部分路径 * @param localFileList * @param remotePath */public static void execMultiCommand(List<String> localFileList,String remotePath){List<String[]> retList = FileUtils.getNginxConfig();for (String[] strings : retList) {execMultiCommand(localFileList, strings[0],strings[1],strings[2],strings[3] + "/" + remotePath);}}/** * 执行上传操作的方法,值传入待上传的文件列表和远程部分路径 * @param localFileArray * @param remotePath */public static void execMultiCommand(String[] localFileArray,String remotePath){List<String[]> retList = FileUtils.getNginxConfig();for (String[] strings : retList) {execMultiCommand(localFileArray, strings[0],strings[1],strings[2],strings[3] + "/" + remotePath);}}/** * 执行上传操作的方法,值传入待上传的文件列表 * @param localFileArray */public static void execMultiCommand(String[] localFileArray){List<String[]> retList = FileUtils.getNginxConfig();for (String[] strings : retList) {execMultiCommand(localFileArray, strings[0],strings[1],strings[2],strings[3]);}}/** * 上传单个文件或者文件夹 * @param localFile */public static void execCommand(String localFile){List<String[]> retList = FileUtils.getNginxConfig();for (String[] strings : retList) {execCommand(localFile, strings[0],strings[1],strings[2],strings[3]);}}}
其中ThreadUtil如下:
package com.xx.util;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;/** * 线程辅助类,用来读取输入流 * @author Administrator * */public class ThreadUtil implements Runnable{private InputStream ins;public ThreadUtil(InputStream ins) {this.ins = ins;}public void run() {try {BufferedReader reader = new BufferedReader(new InputStreamReader(ins));String line = null;while ((line = reader.readLine()) != null) {System.out.println(line);}} catch (Exception e) {e.printStackTrace();}}}
其中FileUtils.getNginxConfig()的代码如下:
/** * 获取Nginx的配置信息 * @return ret List<String[]> */public static List<String[]> getNginxConfig(){List<String[]> ret = new ArrayList<String[]>();Properties p = new Properties();try {p.load(FileUtils.class.getResourceAsStream("/com/sac/site/util/common.properties"));String userName = p.getProperty("nginx_username", "root").trim();String password = p.getProperty("nginx_password", "root").trim();String serverIp = p.getProperty("nginx_serverIp", "172.18.121.72").trim();String serverPath = p.getProperty("nginx_serverPath", "/root/nginx").trim();if (-1 != userName.indexOf(',')){String[] userNames = userName.split(",");String[] passwords = password.split(",");String[] serverIps = serverIp.split(",");String[] serverPaths = serverPath.split(",");for (int i = 0; i < userNames.length; i++) {String[] data = new String[4];data[0] = userNames[i];data[1] = passwords[i];data[2] = serverIps[i];data[3] = serverPaths[i];ret.add(data);}}else{String[] data = new String[4];data[0] = userName;data[1] = password;data[2] = serverIp;data[3] = serverPath;ret.add(data);}} catch (IOException e) {e.printStackTrace();}return ret;}
在调用时候很简单,直接传入对应的参数即可。比如:
TransferUtil.execCommand("c:\\test.txt","root","root","192.168.7.7","/root/upload").
0 0
- 在Java中使用pscp命令上传单个或者多个文件(文件夹)到远程Linux服务器
- pscp-详解使用pscp命令Linux文件上传与下载
- 使用pscp上传文件到linux系统
- java 压缩单个文件,多个文件,或者压缩文件夹
- 在windows中把文件上传到远程Linux服务器
- 使用pscp命令Linux文件上传与下载
- 详解使用pscp命令Linux文件上传与下载
- windows与Linux间远程拷贝文件(pscp命令)
- windows与Linux间远程拷贝文件(pscp命令)
- pscp命令linux文件上传与下载
- Linux压缩多个文件或者文件夹的命令
- php上传单个或者多个文件函数
- common-fileupload 上传单个或者多个文件 示例
- Linux中使用scp命令进行文件上传至远程服务器
- DOS命令行使用pscp实现远程文件和文件夹传输
- java 单个或多个文件上传
- plink和pscp命令使用(登录linux并执行命令/linux和Windows服务器文件互拷)
- (10) Linux ----- 使用pscp实现Windows 和 Linux服务器间远程拷贝文件
- Android Fragment 生命周期详解
- 我的成长之路
- 观察者模式
- 在Windows中安装python
- 自己学习的网页
- 在Java中使用pscp命令上传单个或者多个文件(文件夹)到远程Linux服务器
- android中dip、dp、px、sp和屏幕密度
- js中获取时间new Date()详细介绍
- 网站如何集成支付宝支付接口
- zip解压中文乱码解决与使用ant实现zip解压缩
- 批量修改一个文件夹下所有的文件后缀
- svn进行迁移
- LeetCode – Valid Palindrome (Java)
- Error: no `server' JVM at `C:\Program Files\Java\jre6\bin\server\jvm.dll'