JSch:純JAVA實現SFTP文件上傳和下載
如果你想用純JAVA實現SFTP文件上傳或下載,或者是想純JAVA連接到SSH2服務器上執行命令,那就使用JSch.jar包吧。這里我們先描述實現SFTP協議的上傳和下載,上代碼和詳細的代碼注釋:
/**
- 利用JSch包實現SFTP下載、上傳文件
- @param ip 主機IP
- @param user 主機登陸用戶名
- @param psw 主機登陸密碼
- @param port 主機ssh2登陸端口,如果取默認值,傳-1 */ public static void sshSftp(String ip, String user, String psw ,int port) throws Exception{ Session session = null; Channel channel = null;
JSch jsch = new JSch();
if(port <=0){
//連接服務器,采用默認端口
session = jsch.getSession(user, ip);
}else{
//采用指定的端口連接服務器
session = jsch.getSession(user, ip ,port);
}
//如果服務器連接不上,則拋出異常
if (session == null) {
throw new Exception("session is null");
}
//設置登陸主機的密碼
session.setPassword(psw);//設置密碼
//設置第一次登陸的時候提示,可選值:(ask | yes | no)
session.setConfig("StrictHostKeyChecking", "no");
//設置登陸超時時間
session.connect(30000);
try {
//創建sftp通信通道
channel = (Channel) session.openChannel("sftp");
channel.connect(1000);
ChannelSftp sftp = (ChannelSftp) channel;
//進入服務器指定的文件夾
sftp.cd("domains");
//列出服務器指定的文件列表
Vector v = sftp.ls("*.txt");
for(int i=0;i<v.size();i++){
System.out.println(v.get(i));
}
//以下代碼實現從本地上傳一個文件到服務器,如果要實現下載,對換以下流就可以了
OutputStream outstream = sftp.put("1.txt");
InputStream instream = new FileInputStream(new File("c:/print.txt"));
byte b[] = new byte[1024];
int n;
while ((n = instream.read(b)) != -1) {
outstream.write(b, 0, n);
}
outstream.flush();
outstream.close();
instream.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
session.disconnect();
channel.disconnect();
}
}</pre>
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!