本文目錄一覽:
- 1、Apache SSHD實現SFTP服務端,客戶端訪問進行遠程文件上傳下載
- 2、如何升級jsch-0.1.53.jar
- 3、用java實現sftp下載,報2: No such file
- 4、如何實現jsch logger列印
Apache SSHD實現SFTP服務端,客戶端訪問進行遠程文件上傳下載
package jsch;
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
public class Test {
protected String host;//sftp伺服器ip
protected String username;//用戶名
protected String password;//密碼
protected String privateKey;//密鑰文件路徑
protected String passphrase;//密鑰口令
protected int port = 22;//默認的sftp埠號是22
/**
* 獲取連接
* @return channel
*/
public ChannelSftp connectSFTP() {
JSch jsch = new JSch();
Channel channel = null;
try {
if (privateKey != null !””.equals(privateKey)) {
//使用密鑰驗證方式,密鑰可以使有口令的密鑰,也可以是沒有口令的密鑰
if (passphrase != null “”.equals(passphrase)) {
jsch.addIdentity(privateKey, passphrase);
} else {
jsch.addIdentity(privateKey);
}
}
Session session = jsch.getSession(username, host, port);
if (password != null !””.equals(password)) {
session.setPassword(password);
}
Properties sshConfig = new Properties();
sshConfig.put(“StrictHostKeyChecking”, “no”);// do not verify host key
session.setConfig(sshConfig);
// session.setTimeout(timeout);
session.setServerAliveInterval(92000);
session.connect();
//參數sftp指明要打開的連接是sftp連接
channel = session.openChannel(“sftp”);
channel.connect();
} catch (JSchException e) {
e.printStackTrace();
}
return (ChannelSftp) channel;
}
/**
* 上傳文件
*
* @param directory
* 上傳的目錄
* @param uploadFile
* 要上傳的文件
* @param sftp
*/
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
s;
File file = new File(uploadFile);
s(new FileInputStream(file), file.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 下載文件
*
* @param directory
* 下載目錄
* @param downloadFile
* 下載的文件
* @param saveFile
* 存在本地的路徑
* @param sftp
*/
public void download(String directory, String downloadFile,
String saveFile, ChannelSftp sftp) {
try {
s;
s;
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 刪除文件
*
* @param directory
* 要刪除文件所在目錄
* @param deleteFile
* 要刪除的文件
* @param sftp
*/
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
s;
s;
} catch (Exception e) {
e.printStackTrace();
}
}
public void disconnected(ChannelSftp sftp){
if (sftp != null) {
try {
s;
} catch (JSchException e) {
e.printStackTrace();
}
s;
}
}
}
如何升級jsch-0.1.53.jar
首先這裡需要介紹一個新朋友給大家,就是他JSch。
這裡簡單介紹一下JSch,他是是SSH2的一個純Java實現。Java中可以通過使用JSch來連接到sshd 伺服器上,並進行文件的下載刪除上傳等操作。
2
JSch下載地址為可以直接百度一下。
找到Download,如圖所示:
這裡我們看到有兩個可以下載的,一個是.zip,一個是.jar。
jsch-0.1.53.zip:為JSch的源碼壓縮包,有興趣的碼友可以下載下來研究一下。
jsch-0.1.53.jar:為JSch的編譯好的jar包,開發時放到工程中即可。
這裡我們就直接下載jsch-0.1.53.jar了。
END
JSch使用
我們將下載好的jsch-0.1.53.jar包放在我們的工程下方,並將jar包引入到工程中。
在工程中定義一個連接SFTP的類,這裡我們定義為SFTPUtil.java。
大家可以根據自己需要進行定義。
首先我們需要在類中定義幾個靜態變數。
主機地址、埠號、用戶名、密碼
接下來我們定義鏈接到該伺服器的方法名,這裡命名該方法名為connect。
創建伺服器連接的過程大致為一下幾點:
1、創建session,將伺服器地址信息放入session;
2、建立連接;
3、打開channel;
4、鏈接成功;
用java實現sftp下載,報2: No such file
String directory = “.”;
目測 /home/httpd/test/ 是*nix的路徑,而你用的是Windows,一來,沒有這個目錄,二來SFTP伺服器分配的目錄應該也不是這個,所以改”.”,即當前目錄試試,如果不行就留空,或者改”/”
如何實現jsch logger列印
ChannelSftp類是JSch實現SFTP核心類,它包含了所有SFTP的方法,如:
put(): 文件上傳
get(): 文件下載
cd(): 進入指定目錄
ls(): 得到指定目錄下的文件列表
rename(): 重命名指定文件或目錄
rm(): 刪除指定文件
mkdir(): 創建目錄
rmdir(): 刪除目錄
等等(這裡省略了方法的參數,put和get都有多個重載方法,具體請看源代碼,這裡不一一列出。)
原創文章,作者:NXLL,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/144039.html