日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

SFTP例子2----使用JSch实现SFTP文件传输

發布時間:2025/3/19 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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文件传输的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。