工具类
注意:
在本地测试的时候,需要把虚拟机的系统的操作目录设置:cchmod -R 777 目录
以及关闭selinux防火墙 临时关闭不必重启使用 setenforce 0
sftp 远程连接
package com.test;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;
import java.util.logging.Logger;
/**
* @ClassName FTPUtils
* @Description
* @Author 周志强
* @Date 2021/3/25 12:16
* @Version 1.0
*/
public class FTPUtils {
static Session sshSession=null;
static ChannelSftp sftp=null;
//获取sftp通道
/**
* 上传文件(可供Action/Controller层使用)
*
* @param hostname
* FTP服务器地址
* @param port
* FTP服务器端口号
* @param username
* FTP登录帐号
* @param password
* FTP登录密码
*/
public static boolean getConnection(String hostname, int port, String username, String password){
boolean flag=false;
try {
JSch jSch = new JSch();
//获取sshSession 用户名-ip-端口号
sshSession = jSch.getSession(username, hostname, port);
//添加密码
sshSession.setPassword(password);
Properties sshConfig = new Properties();
//严格主机密钥检查
sshConfig.put("StrictHostKeyChecking","no");
sshSession.setConfig(sshConfig);
//开启sshSession连接
sshSession.connect();
//获取sftp通道
Channel channel = sshSession.openChannel("sftp");
//开启
channel.connect();
sftp = (ChannelSftp) channel;
flag=true;
} catch (Exception e) {
Logger log = Logger.getLogger("log");
log.severe("连接失败");
}
return flag;
}
//sftp上传文件
/**
* 上传文件(可供Action/Controller层使用)
*
* @param hostname
* FTP服务器地址
* @param port
* FTP服务器端口号
* @param username
* FTP登录帐号
* @param password
* FTP登录密码
* @param pathname
* FTP服务器保存目录
* @param fileName
* 上传到FTP服务器后的文件名称
* @param inputStream
* 输入文件流
*/
public static boolean uploadFile(String hostname, int port, String username, String password, String pathname,
String fileName, InputStream inputStream){
boolean flag=false;
try {
getConnection(hostname,port,username,password);
sftp.cd(pathname);
sftp.put(inputStream,fileName);
flag=true;
} catch (Exception e) {
Logger logger = Logger.getLogger("log");
logger.severe("上传失败");
}finally {
if (sshSession != null) {
sshSession.disconnect();
}
if (sftp != null) {
sftp.disconnect();
}
}
return flag;
}
//sftp下载文件
public static boolean downloadFile(String hostname, int port, String username, String password, String pathname,
String downloadFileName, OutputStream outputStream){
boolean flag=false;
try {
getConnection(hostname,port,username,password);
sftp.cd(pathname);
sftp.get(downloadFileName,outputStream);
flag=true;
} catch (Exception e) {
Logger logger = Logger.getLogger("log");
logger.severe("下载失败");
}finally {
if (sshSession != null) {
sshSession.disconnect();
}
if (sftp != null) {
sftp.disconnect();
}
}
return flag;
}
}
测试类
import com.test.FTPUtils;
import org.junit.Test;
import java.io.*;
import java.util.logging.Logger;
/**
* @ClassName Demo
* @Description
* @Author 周志强
* @Date 2021/3/25 15:00
* @Version 1.0
*/
public class Demo {
@Test
public void test(){
String hostName="192.168.1.108";
int port=22;
String username="ccit";
String password="dagdsag";
String fileName="20210323_FZ_S10581.txt";
String pathName="/app/data/";
BufferedInputStream bin=null;
try {
bin=new BufferedInputStream(new FileInputStream(new File("D:\\20210323_FZ_S10581.txt")));
FTPUtils.uploadFile(hostName,port,username,password,pathName,fileName,bin);
Logger log = Logger.getLogger("log");
log.info("上传成功");
} catch (Exception e) {
Logger log = Logger.getLogger("log");
log.severe("上传失败");
}finally {
if (bin != null) {
try {
bin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Test
public void test1(){
String hostName="192.168.1.108";
int port=22;
String username="ccit";
String password="adgfda";
String fileName="20210323_FZ_S10581.txt";
String pathName="/app/data/";
BufferedOutputStream bo=null;
try {
bo=new BufferedOutputStream(new FileOutputStream(new File("D:\\20210323_FZ_S10581.txt")));
FTPUtils.downloadFile(hostName,port,username,password,pathName,fileName,bo);
Logger log = Logger.getLogger("log");
log.info("下载成功");
} catch (Exception e) {
Logger log = Logger.getLogger("log");
log.severe("下载失败");
}finally {
if (bo != null) {
try {
bo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
ftp远程连接
package com.test;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.logging.Logger;
/**
* @ClassName FTPUtils
* @Description
* @Author 周志强
* @Date 2021/3/26 17:41
* @Version 1.0
*/
public class FTPUtils {
/*
* 操作前提:需要设置服务端 上传和下载的路径为 chmod -R 777 /app/data/
* */
static FTPClient ftpClient=null;
//连接ftp服务器 hostName:主机 port:端口号 userName:用户名 password:密码
public static void getConnection(String hostName,int port,String userName,String password){
ftpClient = new FTPClient();
ftpClient.setControlEncoding("UTF-8");
Logger log = Logger.getLogger("log");
try{
log.info("开始连接ftp服务器");
//连接ftp服务器
ftpClient.connect(hostName,port);
//登录ftp服务器
ftpClient.login(userName,password);
//是否成功登录ftp服务器
int replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
log.severe("连接ftp服务器失败");
} else {
log.info("连接ftp服务器成功");
}
}catch (Exception e){
log.severe("连接ftp服务器失败");
}
}
//上传文件 pathName:服务器路径 fileName:文件名 inputStream:文件
public static void uploadFile(String hostName, int port, String userName, String password,
String pathName, String fileName, InputStream inputStream){
getConnection(hostName,port,userName,password);
Logger log = Logger.getLogger("log");
try {
// 设置以二进制流的方式传输
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//调用此方法解决假死状态(设置为被动模式:客户端通知服务端开通一个端口用来数据传输)
ftpClient.enterLocalPassiveMode();
ftpClient.changeWorkingDirectory(pathName);
boolean isUpload = ftpClient.storeFile(fileName, inputStream);
if (!isUpload) {
log.severe("上传失败");
} else {
inputStream.close();
ftpClient.logout();
log.info("上传成功");
}
} catch (Exception e) {
log.info("上传失败");
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException e) {
log.info("ftp连接关闭失败");
e.printStackTrace();
}
}
}
}
//下载文件 pathName:服务器路径 fileName:文件名 outputStream:文件
public static void downloadFile(String hostName, int port, String userName, String password,
String pathName, String fileName, OutputStream outputStream){
getConnection(hostName,port,userName,password);
Logger log = Logger.getLogger("log");
try {
// 设置以二进制流的方式传输
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//调用此方法解决假死状态(设置为被动模式:客户端通知服务端开通一个端口用来数据传输)
ftpClient.enterLocalPassiveMode();
//切换目录
ftpClient.changeWorkingDirectory(pathName);
//文件下载
boolean isDownload = ftpClient.retrieveFile(fileName, outputStream);
if (!isDownload) {
log.severe("下载失败");
} else {
outputStream.close();
ftpClient.logout();
log.info("下载成功");
}
} catch (Exception e) {
log.severe("下载失败");
e.printStackTrace();
}finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException e) {
log.info("ftp连接关闭失败");
e.printStackTrace();
}
}
}
}
}
测试类
package com.test;
import org.junit.Test;
import java.io.*;
public class FTPUtilsTest {
@Test
public void getConnection() {
String hostName="192.168.184.129";
int port=21;
String username="dasg";
String password="dasg";
String fileName1="20210323_FZ_S10581.txt";
String pathName="/app/data/";
InputStream inputStream=null;
FTPUtils.getConnection(hostName,port,username,password);
}
@Test
public void uploadFile() {
String hostName="192.168.184.129";
int port=21;
String username="z方法";
String password="fdg";
String fileName="20210323_FZ_S10581.txt";
String pathName="/app/data/";
try {
BufferedInputStream bin=new BufferedInputStream(new FileInputStream(new File("D:\\20210323_FZ_S10581.txt")));
FTPUtils.uploadFile(hostName,port,username,password,pathName,fileName,bin);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
@Test
public void downloadFile() {
String hostName="192.168.184.129";
int port=21;
String username="看的";
String password="dasg";
String fileName="20210323_FZ_S10581.txt";
String pathName="/app/data/";
//目标路径
String desPath="D:\\20210323_FZ_S10581.txt";
try {
BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(new File(desPath)));
FTPUtils.downloadFile(hostName,port,username,password,pathName,fileName,bo);
} catch (Exception e) {
e.printStackTrace();
}
}
}