javascript
SFTP例子2----使用JSch实现SFTP文件传输
1、JSch開發包下載
? ? ?http://www.jcraft.com/jsch/
? ? ?目前最新版本為:jsch-0.1.51
?
2、簡單例子,列出指定目錄下的文件列表
import?java.util.Properties; import?java.util.Vector;import?com.jcraft.jsch.ChannelSftp; import?com.jcraft.jsch.JSch; import?com.jcraft.jsch.Session;public?class?Demo003?{/***?@param?args*/public?static?void?main(String[]?args)?throws?Exception{JSch?jsch?=?new?JSch();Session?session?=?jsch.getSession("cmb",?"localhost");session.setPassword("cmb123");Properties?config?=?new?Properties();config.put("StrictHostKeyChecking",?"no");session.setConfig(config);session.connect();ChannelSftp?channelSftp?=?(ChannelSftp)session.openChannel("sftp");channelSftp.connect();channelSftp.setFilenameEncoding("gbk");Vector?vector??=?channelSftp.ls("/");try{for(Object?obj?:vector){if(obj?instanceof?com.jcraft.jsch.ChannelSftp.LsEntry){String?fileName?=?((com.jcraft.jsch.ChannelSftp.LsEntry)obj).getFilename();System.out.println(fileName);}}}finally{channelSftp.quit();session.disconnect();}}}3、JSch實現SFTP功能一些主要類的介紹
1)JSch 類
?
2)Session 會話對象類
?
3)ChannelSFTP類
ChannelSFTP類是JSch實現SFTP核心類,它提供了一些SFTP常見的操作方法,如下
| 方法名 | 方法說明 |
| put() ?? | 文件上傳 |
| get()? | 文件下載 |
| cd() ?? | 進入指定目錄 |
| ls() ?? | 得到指定目錄下的文件列表 |
| rename()? | 重命名(移動)指定文件或目錄 |
| rm() ?? | 刪除指定文件 |
| mkdir() | 創建目錄 |
| rmdir() | 刪除目錄(只允許刪除空目錄) |
注:以上這些方法都有很多重載方法
?
4)SftpProgressMonitor 傳輸進度監控類
?
?
5)LsEntry 可以認為是文件服務器上的文件條目信息,把包含文件或者目錄相關屬性 。ls命令返回的Vector中的就是LsEntry對象列表
?
?
?
4、SFTP文件傳輸的實現步驟
//1、創建JSch類,好比是FlashFXP工具
? ?JSch?jsch?=?new?JSch();
????????
???//2、創建本次的文件傳輸會話對象,并連接到SFTP服務器。它好比是通過FlashFXP工具連接到SFTP服務器
???session?=?jsch.getSession(username,?host,?port);
???session.setPassword(passwd);
? ?Properties?config?=?new?Properties();
? ?config.put("StrictHostKeyChecking",?"no");
???session.setConfig(config);
???session.connect();
???try{
? ?//3、在該session會話中開啟一個SFTP通道,之后就可以在該通道中進行文件傳輸了
???????channelSftp?=?(ChannelSftp)session.openChannel("sftp");
???????channelSftp.connect();
? ?}catch(Exception?e){
? ? ? ?e.printStackTrace();
? ? ? ?disConnect();
???????throw?e;
? ?}
????????
???//4、進行文件傳輸操作:put()、get()....
???channelSftp.put(...)
????????
???//5、操作完畢后,關閉通道并退出本次會話
???if(channelSftp!=null?&&?channelSftp.isConnected()){
? ? ? ? channelSftp.disconnect();
? ?}
????????
???if(session!=null?&&?session.isConnected()){
? ? ? ? session.disconnect();
? ?}
?
?
?
?
5、JSch中文亂碼處理
? ? ?使用jsch-0.1.51進行SFTP文件傳輸時,對中文處理會出現亂碼,并且也無法通過setFileNameEncoding()方法來設置編碼。
? ? ?解決方案:
? ? ? ? ?下載jsch-0.1.51源代碼,在ChannelSFTP.java文件中找到SENDINIT( )方法,修改紅色部分的內容
? ? ? ? ???private void sendINIT() throws Exception {
? ? this.packet.reset();
? ? putHEAD((byte)1, 5);
????this.buf.putInt(3); ??//修改為 ?this.buf.putInt(2);
? ? getSession().write(this.packet, this, 9);
? }
?
然后編譯并更改jar中的對應class文件即可。
?
?
? ? ? ? ??
6、ChannelSftp類的主要API說明如下:
太多就不貼了。。。。
本文轉自:http://www.cnblogs.com/itmanxgl/p/fe5d33512609fe540eb08a76e3c4db3a.html?utm_source=tuicool&utm_medium=referral
感謝作者分享!
轉載于:https://blog.51cto.com/chengxuyuan/1734965
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的SFTP例子2----使用JSch实现SFTP文件传输的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Object-C---gt;Swift之
- 下一篇: Linux 软件的安装