天天看點

php sftp上傳檔案夾,java實作sftp用戶端上傳檔案以及檔案夾的功能

本篇文章主要介紹了java實作sftp用戶端上傳檔案以及檔案夾的功能代碼,具有一定的參考價值,有興趣的可以了解一下。

1.依賴的jar檔案 jsch-0.1.53.jar

2.登入方式有密碼登入,和密匙登入

代碼:

主函數:

import java.util.Properties;

import com.cloudpower.util.Login;

import com.util.LoadProperties;

public class Ftp {

public static void main(String[] args) {

Properties properties = LoadProperties.getProperties();

Login.login(properties);

}

}

登陸頁面的代碼:

package com.cloudpower.util;

import java.io.Console;

import java.util.Properties;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.Session;

public class Login {

public static void login(Properties properties) {

String ip = properties.getProperty("ip");

String user = properties.getProperty("user");

String pwd = properties.getProperty("pwd");

String port = properties.getProperty("port");

String privateKeyPath = properties.getProperty("privateKeyPath");

String passphrase = properties.getProperty("passphrase");

String sourcePath = properties.getProperty("sourcePath");

String destinationPath = properties.getProperty("destinationPath");

if (ip != null && !ip.equals("") && user != null && !user.equals("")

&& port != null && !port.equals("") && sourcePath != null

&& !sourcePath.equals("") && destinationPath != null

&& !destinationPath.equals("")) {

if (privateKeyPath != null && !privateKeyPath.equals("")) {

sshSftp2(ip, user, Integer.parseInt(port), privateKeyPath,

passphrase, sourcePath, destinationPath);

} else if (pwd != null && !pwd.equals("")) {

sshSftp(ip, user, pwd, Integer.parseInt(port), sourcePath,

destinationPath);

} else {

Console console = System.console();

System.out.print("Enter password:");

char[] readPassword = console.readPassword();

sshSftp(ip, user, new String(readPassword),

Integer.parseInt(port), sourcePath, destinationPath);

}

} else {

System.out.println("請先設定配置檔案");

}

}

public static void sshSftp(String ip, String user, String psw, int port,

String sPath, String dPath) {

System.out.println("password login");

Session session = null;

JSch jsch = new JSch();

try {

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(300000);

UpLoadFile.upLoadFile(session, sPath, dPath);

} catch (Exception e) {

e.printStackTrace();

}

System.out.println("success");

}

public static void sshSftp2(String ip, String user, int port,

String privateKey, String passphrase, String sPath, String dPath) {

System.out.println("privateKey login");

Session session = null;

JSch jsch = new JSch();

try {

// 設定密鑰和密碼

// 支援密鑰的方式登陸,隻需在jsch.getSession之前設定一下密鑰的相關資訊就可以了

if (privateKey != null && !"".equals(privateKey)) {

if (passphrase != null && "".equals(passphrase)) {

// 設定帶密碼的密鑰

jsch.addIdentity(privateKey, passphrase);

} else {

// 設定不帶密碼的密鑰

jsch.addIdentity(privateKey);

}

}

if (port <= 0) {

// 連接配接伺服器,采用預設端口

session = jsch.getSession(user, ip);

} else {

// 采用指定的端口連接配接伺服器

session = jsch.getSession(user, ip, port);

}

// 如果伺服器連接配接不上,則抛出異常

if (session == null) {

throw new Exception("session is null");

}

// 設定第一次登陸的時候提示,可選值:(ask | yes | no)

session.setConfig("StrictHostKeyChecking", "no");

// 設定登陸逾時時間

session.connect(300000);

UpLoadFile.upLoadFile(session, sPath, dPath);

System.out.println("success");

} catch (Exception e) {

e.printStackTrace();

}

}

}

檔案上傳的代碼:

package com.cloudpower.util;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.Scanner;

import com.jcraft.jsch.Channel;

import com.jcraft.jsch.ChannelSftp;

import com.jcraft.jsch.Session;

import com.jcraft.jsch.SftpException;

public class UpLoadFile {

public static void upLoadFile(Session session, String sPath, String dPath) {

Channel channel = null;

try {

channel = (Channel) session.openChannel("sftp");

channel.connect(10000000);

ChannelSftp sftp = (ChannelSftp) channel;

try {

sftp.cd(dPath);

Scanner scanner = new Scanner(System.in);

System.out.println(dPath + ":此目錄已存在,檔案可能會被覆寫!是否繼續y/n?");

String next = scanner.next();

if (!next.toLowerCase().equals("y")) {

return;

}

} catch (SftpException e) {

sftp.mkdir(dPath);

sftp.cd(dPath);

}

File file = new File(sPath);

copyFile(sftp, file, sftp.pwd());

} catch (Exception e) {

e.printStackTrace();

} finally {

session.disconnect();

channel.disconnect();

}

}

public static void copyFile(ChannelSftp sftp, File file, String pwd) {

if (file.isDirectory()) {

File[] list = file.listFiles();

try {

try {

String fileName = file.getName();

sftp.cd(pwd);

System.out.println("正在建立目錄:" + sftp.pwd() + "/" + fileName);

sftp.mkdir(fileName);

System.out.println("目錄建立成功:" + sftp.pwd() + "/" + fileName);

} catch (Exception e) {

// TODO: handle exception

}

pwd = pwd + "/" + file.getName();

try {

sftp.cd(file.getName());

} catch (SftpException e) {

// TODO: handle exception

e.printStackTrace();

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

for (int i = 0; i < list.length; i++) {

copyFile(sftp, list[i], pwd);

}

} else {

try {

sftp.cd(pwd);

} catch (SftpException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

System.out.println("正在複制檔案:" + file.getAbsolutePath());

InputStream instream = null;

OutputStream outstream = null;

try {

outstream = sftp.put(file.getName());

instream = new FileInputStream(file);

byte b[] = new byte[1024];

int n;

try {

while ((n = instream.read(b)) != -1) {

outstream.write(b, 0, n);

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} catch (SftpException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

try {

outstream.flush();

outstream.close();

instream.close();

} catch (Exception e2) {

// TODO: handle exception

e2.printStackTrace();

}

}

}

}

}

讀取配置檔案的代碼:

package com.util;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;

public class LoadProperties {

public static Properties getProperties() {

File file = new File(Class.class.getClass().getResource("/").getPath()

+ "properties.properties");

InputStream inputStream = null;

try {

inputStream = new FileInputStream(file);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

Properties properties = new Properties();

try {

properties.load(inputStream);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return properties;

}

}

代碼目錄結構:

php sftp上傳檔案夾,java實作sftp用戶端上傳檔案以及檔案夾的功能

測試運作時配置檔案放在項目的bin目錄下(打包成可運作jar檔案的時候要删除,打包完成後将配置檔案和jar包放在同級目錄下即可):

properties.properties

ip=

user=

pwd=

port=22

privateKeyPath=

passphrase=

sourcePath=

destinationPath=/home/dbbs/f

打包可運作jar檔案:

Export->java->Runnabe JAR file

完成後

在控制台運作java -jar 導出jar包的名字.jar 即可

以上就是本文的全部内容,希望對大家的學習有所幫助,也希望大家多多支援PHP中文網。

更多java實作sftp用戶端上傳檔案以及檔案夾的功能相關文章請關注PHP中文網!

本文原創釋出php中文網,轉載請注明出處,感謝您的尊重!