本文为实现对linux服务器文件的操作。windows服务器不支持。



引入jar包:jsch-0.1.42.jar

  1. package com.csvreader.sftp;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.util.List;
  7. import java.util.Properties;
  8. import java.util.Vector;
  9.  
  10. import org.junit.Test;
  11.  
  12. import com.jcraft.jsch.Channel;
  13. import com.jcraft.jsch.ChannelSftp;
  14. import com.jcraft.jsch.JSch;
  15. import com.jcraft.jsch.JSchException;
  16. import com.jcraft.jsch.Session;
  17. import com.jcraft.jsch.SftpException;
  18.  
  19. public class SftpUtil {
  20. /**
  21. *
  22. * @param host
  23. * @param port
  24. * @param username
  25. * @param password
  26. * @return
  27. * @throws JSchException
  28. */
  29. public ChannelSftp connect(String host, int port, String username,String password) throws JSchException {
  30. // 1.声明连接Sftp的通道
  31. ChannelSftp nChannelSftp = null;
  32. // 2.实例化JSch
  33. JSch nJSch = new JSch();
  34. // 3.获取session
  35. Session nSShSession = nJSch.getSession(username, host, port);
  36. System.out.println("Session创建成功");
  37. // 4.设置密码
  38. nSShSession.setPassword(password);
  39. // 5.实例化Properties
  40. Properties nSSHConfig = new Properties();
  41. // 6.设置配置信息
  42. nSSHConfig.put("StrictHostKeyChecking", "no");
  43. // 7.session中设置配置信息
  44. nSShSession.setConfig(nSSHConfig);
  45. // 8.session连接
  46. nSShSession.connect();
  47. System.out.println("Session已连接");
  48. // 9.打开sftp通道
  49. Channel channel = nSShSession.openChannel("sftp");
  50. // 10.开始连接
  51. channel.connect();
  52. nChannelSftp = (ChannelSftp) channel;
  53. System.out.println("连接到主机" + host + ".");
  54. return nChannelSftp;
  55. }
  56.  
  57. /**
  58. * 文件重命名
  59. * @param directory
  60. * @param oldname
  61. * @param newname
  62. * @param sftp
  63. */
  64. public void renameFile(String directory, String oldname, String newname,ChannelSftp sftp) {
  65. try {
  66. sftp.cd(directory);
  67. sftp.rename(oldname, newname);
  68. } catch (Exception e) {
  69. e.printStackTrace();
  70. }
  71. }
  72.  
  73. /**
  74. * 上传文件
  75. * @param directory
  76. * @param uploadFile
  77. * @param sftp
  78. */
  79. public void upload(String directory, String uploadFile, ChannelSftp sftp) {
  80. try {
  81. sftp.cd(directory);
  82. File file = new File(uploadFile);
  83. sftp.put(new FileInputStream(file), file.getName());
  84. } catch (Exception e) {
  85. e.printStackTrace();
  86. }
  87. }
  88.  
  89. /**
  90. * 下载文件
  91. * @param directory
  92. * @param downloadFile
  93. * @param saveFile
  94. * @param sftp
  95. */
  96. public void download(String directory, String downloadFile,String saveFile, ChannelSftp sftp) {
  97. try {
  98. sftp.cd(directory);
  99. File file = new File(saveFile);
  100. sftp.get(downloadFile, new FileOutputStream(file));
  101.  
  102. } catch (Exception e) {
  103. e.printStackTrace();
  104. }
  105. }
  106.  
  107. /**
  108. * 删除文件
  109. * @param directory
  110. * @param deleteFile
  111. * @param sftp
  112. */
  113. public void delete(String directory, String deleteFile, ChannelSftp sftp) {
  114. try {
  115. sftp.cd(directory);
  116. sftp.rm(deleteFile);
  117. System.out.println("删除成功");
  118. } catch (Exception e) {
  119. System.out.println("删除失败");
  120. e.printStackTrace();
  121. }
  122. }
  123.  
  124. /**
  125. * 列出列表下的文件
  126. * @param directory
  127. * @param sftp
  128. * @return
  129. * @throws SftpException
  130. */
  131. public Vector listFiles(String directory, ChannelSftp sftp)throws SftpException {
  132. return sftp.ls(directory);
  133. }
  134.  
  135. /**
  136. * 下载文件夹下面的所有文件
  137. *
  138. * @param viDirectory 文件夹
  139. * @param viHost 主机名
  140. * @param viPort 端口号
  141. * @param viUserName 用户名
  142. * @param viPassWord 用户密码
  143. * @param viSaveDir 保存路径
  144. * @return
  145. */
  146. @Test
  147. public List<String> downloadDirFile(String viDirectory, String viHost,int viPort, String viUserName, String viPassWord, String viSaveDir) {
  148. ChannelSftp nChannelSftp = null;
  149. List<String> nFileNameList = null;
  150. try {
  151. // 1.实例化nSftpUtil工具类
  152. SftpUtil nSftpUtil = new SftpUtil();
  153. // 2.建立Sftp通道
  154. nChannelSftp = nSftpUtil.connect(viHost, 22, viUserName, viPassWord);
  155. // 3.获取目录下面所有文件
  156. Vector nVector = nChannelSftp.ls(viDirectory);
  157. // 4.循环遍历文件
  158. for (int i = 0; i < nVector.size(); i++) {
  159. // 5.进入服务器文件夹
  160. nChannelSftp.cd(viDirectory);
  161. // 6.实例化文件对象
  162. String nFileName = nVector.get(i).toString().substring(56, nVector.get(i).toString().length());
  163. if (!nFileName.contains("csv")) {
  164. continue;
  165. }
  166. File nFile = new File(viSaveDir + File.separator + nFileName);
  167. // 7.下载文件
  168. nChannelSftp.get(nFileName, new FileOutputStream(nFile));
  169. }
  170. } catch (Exception e) {
  171. e.printStackTrace();
  172. } finally {
  173. nChannelSftp.disconnect();
  174. }
  175. return nFileNameList;
  176. }

附件附jar包

通过sftp操作Linux服务器上的文件(java)的更多相关文章

  1. 如何使用sftp下载Linux服务器上的文件到本地

    下载Linux服务器上的文件到本地 Linux服务器上的操作 sftp xxxxx@jumper.xxxx.com 使用put命令进行文件上传,put app.log 本地操作 sftp xxxxx@ ...

  2. Sublime Text编辑远程Linux服务器上的文件

    sublime有个叫sftp的插件,可以通过它直接打开远程机器上的文件进行编辑,并在保存后直接同步到远程linux服务器上. 用Package Control安装插件 按下Ctrl+Shift+P调出 ...

  3. 使用PhpStrom等IDE编辑 远程linux服务器上的文件 实时更新

    习惯了在linux上 vim进行PHP的开发,突然忘了IDE的感觉,所以想到了.通过PhpStrom等IDE直接编辑 samba共享到 mac或者windows本地的磁盘进行编辑. 为了忘却的纪念,有 ...

  4. python 读取Linux服务器上的文件

    使用Python语句,读取Linux远端服务器上的文件打印到控制台的代码实现: 下载包:paramiko import paramiko #服务器信息,主机名(IP地址).端口号.用户名及密码 hos ...

  5. java使用JSCH连接FTP(Linux服务器)上传文件到Linux服务器

    首先需要用到jsch-0.1.54.jar 包: 链接: https://pan.baidu.com/s/1kZR6MqwpCYht9Pp_D6NKQw 密码: gywx 直接上代码: package ...

  6. 通过SecureCRT下载远程Linux服务器上的文件到本地Windows

    sz  文件名[先cd到需要下载的文件的目录层] [root@is13084905-0233 bookinterface]# sz test.txt rz Starting zmodem transf ...

  7. linux 将一个服务器上的文件或者文件夹复制到另一台服务器上

    使用scp将一个Linux系统中的文件或文件夹复制到另一台Linux服务器上 复制文件或文件夹(目录)命令:  一.复制文件:  (1)将本地文件拷贝到远程  scp 文件名 用户名@计算机IP或者计 ...

  8. [转]linux将一个服务器上的文件或者文件夹复制到另一台服务器上

    本文转载自<linux 将一个服务器上的文件或者文件夹复制到另一台服务器上>,有时间实践一把 使用scp将一个Linux系统中的文件或文件夹复制到另一台Linux服务器上 复制文件或文件夹 ...

  9. 从window 的cmd窗口中下载linux 服务器上文件

    下载linux 服务器上的文件 down.php 格式为  pscp linux服务器上用户名@linux 服务器ip  文件在windows系统上的绝对路径 如果是下载服务器上的某个目录,只要在ps ...

随机推荐

  1. c#、.net、asp.net、asp 、ado.net、.net framework的区别

    c#:一种编程语言 .net:一种运行环境 asp.net:基于.netFramework框架下的一种开发技术(相对与asp而言,引入了服务器控件,前后台可分,编译型的编程框架) asp:也是.net ...

  2. build.js

    // https://github.com/shelljs/shelljs// 检查NodeJS和npm的版本require('./check-versions')() process.env.NOD ...

  3. JS打开新窗口,子窗口操作父窗口

    <!--父窗口弹窗代码开始--> <script type="text/javascript"> function OpenWindow() { windo ...

  4. sql 查询某个字段出现的次数

    表名随便起个 testtable 那么有这么一个需求,利用你所学的sql语句 单表查询出下表的结果 也就是统计某个时间某个值出现的次数其实一开始我是很懵,毕竟之前也没做过,只能怪自己学得太浅了.过后我 ...

  5. hdu 1757 (矩阵快速幂) 一个简单的问题 一个简单的开始

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 题意不难理解,当x小于10的时候,数列f(x)=x,当x大于等于10的时候f(x) = a0 * ...

  6. (O)web缓存

    为什么要用缓存 一般针对静态资源如CSS,JS,图片等使用缓存,原因如下: 请求更快:通过将内容缓存在本地浏览器或距离最近的缓存服务器(如CDN),在不影响网站交互的前提下可以大大加快网站加载速度. ...

  7. Windows下war包部署到Linux下Tomcat出现的问题

    最近,将Windows下开发的war包部署到Linux下的Tomcat时报了一个错误:tomcat error in opening zip file.按理说,如果正常,当把war包复制到webapp ...

  8. Python-多线程之消费者模式和GIL全局锁

    一.生产者和消费者模式 什么是生产者消费者模式 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯, 所以生产者生产完数据之后不 ...

  9. P3587 [POI2015]POD

    题目描述 长度为n的一串项链,每颗珠子是k种颜色之一. 第i颗与第i-1,i+1颗珠子相邻,第n颗与第1颗也相邻.切两刀,把项链断成两条链.要求每种颜色的珠子只能出现在其中一条链中.求方案数量(保证至 ...

  10. PHP--根据手机号-淘宝平台获取归属地运营商信息

    //获取手机账号信息 public function get_mobile_area($mobile){ $sms = array('province'=>'', 'supplier'=> ...