package com.whyc.dto;
|
|
import com.enterprisedt.net.ftp.*;
|
import org.apache.commons.lang.StringUtils;
|
|
import java.io.*;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.LinkedList;
|
import java.util.List;
|
|
public class FtpHelper {
|
private FTPClient ftp;
|
|
/**
|
* 初始化Ftp信息
|
*
|
* @param ftpServer ftp服务器地址
|
* @param ftpPort Ftp端口号
|
* @param ftpUsername ftp 用户名
|
* @param ftpPassword ftp 密码
|
*/
|
public FtpHelper(String ftpServer, int ftpPort, String ftpUsername,
|
String ftpPassword) {
|
connect(ftpServer, ftpPort, ftpUsername, ftpPassword);
|
}
|
|
/**
|
* 连接到ftp
|
*
|
* @param ftpServer ftp服务器地址
|
* @param ftpPort Ftp端口号
|
* @param ftpUsername ftp 用户名
|
* @param ftpPassword ftp 密码
|
*/
|
public void connect(String ftpServer, int ftpPort, String ftpUsername, String ftpPassword) {
|
ftp = new FTPClient();
|
try {
|
ftp.setControlEncoding("GBK");
|
ftp.setRemoteHost(ftpServer);
|
ftp.setRemotePort(ftpPort);
|
ftp.setTimeout(1000*60*60*12);
|
ftp.setConnectMode(FTPConnectMode.ACTIVE);
|
ftp.connect();
|
ftp.login(ftpUsername, ftpPassword);
|
ftp.setType(FTPTransferType.BINARY);
|
} catch (Exception e) {
|
e.printStackTrace();
|
ftp = null;
|
}
|
}
|
|
/**
|
* 更改ftp路径
|
*
|
* @param ftp
|
* @param dirName
|
* @return
|
*/
|
public boolean checkDirectory(FTPClient ftp, String dirName) {
|
boolean flag;
|
try {
|
ftp.chdir(dirName);
|
flag = true;
|
} catch (Exception e) {
|
//e.printStackTrace();
|
flag = false;
|
}
|
return flag;
|
}
|
|
/**
|
* 断开ftp链接
|
*/
|
public void disconnect() {
|
try {
|
if (ftp.connected()) {
|
ftp.quit();
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* 读取ftp文件流
|
*
|
* @param filePath ftp文件路径
|
* @return s
|
* @throws Exception
|
*/
|
public InputStream downloadFile(String filePath) throws Exception {
|
InputStream inputStream = null;
|
String fileName = "";
|
filePath = StringUtils.removeStart(filePath, "/");
|
int len = filePath.lastIndexOf("/");
|
if (len == -1) {
|
if (filePath.length() > 0) {
|
fileName = filePath;
|
} else {
|
throw new Exception("没有输入文件路径");
|
}
|
} else {
|
fileName = filePath.substring(len + 1);
|
|
String type = filePath.substring(0, len);
|
String[] typeArray = type.split("/");
|
for (String s : typeArray) {
|
ftp.chdir(s);
|
}
|
}
|
byte[] data;
|
try {
|
data = ftp.get(fileName);
|
inputStream = new ByteArrayInputStream(data);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return inputStream;
|
}
|
|
/**
|
* 上传文件到ftp
|
*
|
* @param file 文件对象
|
* @param filePath 上传的路径
|
* @throws Exception
|
*/
|
public void uploadFile(File file, String filePath) throws Exception {
|
InputStream inStream = new FileInputStream(file);
|
uploadFile(inStream, filePath);
|
}
|
|
/**
|
* 上传文件到ftp
|
*
|
* @param inStream 上传的文件流
|
* @param filePath 上传路径
|
* @throws Exception
|
*/
|
public void uploadFile(InputStream inStream, String filePath)
|
throws Exception {
|
if (inStream == null) {
|
return;
|
}
|
String fileName = "";
|
filePath = StringUtils.removeStart(filePath, "/");
|
int len = filePath.lastIndexOf("/");
|
if (len == -1) {
|
if (filePath.length() > 0) {
|
fileName = filePath;
|
} else {
|
throw new Exception("没有输入文件路径");
|
}
|
} else {
|
fileName = filePath.substring(len + 1);
|
String type = filePath.substring(0, len);
|
String[] typeArray = type.split("/");
|
for (String s : typeArray) {
|
s.trim();
|
if (!checkDirectory(ftp, s)) {
|
ftp.mkdir(s);
|
changeDirectory(s);
|
}
|
}
|
}
|
ftp.put(inStream, fileName);
|
changeDirectory("/");
|
}
|
|
/**
|
* 删除ftp文件
|
*
|
* @param filePath 文件路径
|
* @throws Exception
|
*/
|
public void deleteFile(String filePath) throws Exception {
|
String fileName = "";
|
filePath = StringUtils.removeStart(filePath, "/");
|
int len = filePath.lastIndexOf("/");
|
if (len == -1) {
|
if (filePath.length() > 0) {
|
fileName = filePath;
|
} else {
|
throw new Exception("没有输入文件路径");
|
}
|
} else {
|
fileName = filePath.substring(len + 1);
|
|
String type = filePath.substring(0, len);
|
String[] typeArray = type.split("/");
|
for (String s : typeArray) {
|
if (checkDirectory(ftp, s)) {
|
ftp.chdir(s);
|
}
|
}
|
}
|
ftp.delete(fileName);
|
}
|
|
|
//切换目录
|
public void changeDirectory(String path) {
|
if (!StringUtils.isEmpty(path)) {
|
try {
|
ftp.chdir(path);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
//读取文件列表
|
public List<File> getFileList(String path) {
|
List<File> rsList = new ArrayList<>();
|
if (path == null || path.equals("")) {
|
return rsList;
|
}
|
File file = new File(path);
|
if (!file.exists()) {
|
return rsList;
|
}
|
// 处理文件
|
if (file.isFile()) {
|
rsList.add(file);
|
return rsList;
|
}
|
// 处理文件夹
|
if (null == file.listFiles()) {
|
rsList.add(file);
|
return rsList;
|
}
|
LinkedList<File> forDealList = new LinkedList<>();
|
forDealList.addAll(Arrays.asList(file.listFiles()));
|
while (!forDealList.isEmpty()) {
|
File firstFile = forDealList.removeFirst();
|
// 处理文件
|
if (firstFile.isFile()) {
|
// 把文件自身先加入结果
|
rsList.add(firstFile);
|
continue;
|
}
|
// 处理文件夹
|
File[] files = firstFile.listFiles();
|
if (files == null) {
|
continue;
|
}
|
for (File curr : files) {
|
if (curr.isDirectory()) {
|
// 将此文件夹放入待处理列表
|
forDealList.add(curr);
|
} else {
|
rsList.add(curr);
|
}
|
}
|
}
|
return rsList;
|
}
|
|
public void deleteDir(String dirName) throws IOException, FTPException {
|
FTPClient client = ftp;
|
String[] dir = client.dir(dirName, true);
|
for (String subDirName : dir) {
|
String name = subDirName.substring(subDirName.lastIndexOf(" ") + 1);
|
if(subDirName.contains("<DIR>")){ //文件夹
|
//name = new String(name.getBytes(StandardCharsets.ISO_8859_1),"GBK");
|
deleteDir(dirName+"/"+name);
|
//client.rmdir(dirName+"/"+name);
|
}else{
|
//name = new String(name.getBytes(StandardCharsets.ISO_8859_1),"GBK");
|
client.delete(dirName+"/"+name);
|
}
|
}
|
client.rmdir(dirName);
|
}
|
|
public static void main(String[] args) {
|
try { // 从ftp下载文件
|
FtpHelper ftp = new FtpHelper("192.168.10.80", 21, "lxw", "lxw810412026");
|
//File file = new File("D:\\fileTest\\内阻分析软件-问题反馈-20221031.docx");
|
/*ftp.uploadFile(file, "test/"+"内阻分析软件-问题反馈-20221031.docx");
|
ftp.disconnect();*/
|
List<File> list=ftp.getFileList("D:\\fileTest\\software");
|
if(list!=null&&list.size()>0){
|
for (File file:list) {
|
String name=file.getPath().substring(file.getPath().lastIndexOf("software"));
|
System.out.println(name);
|
String pathName="/"+name.replace("\\","/");
|
ftp.uploadFile(file, pathName);
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public String[] getDirList() throws IOException, FTPException {
|
return ftp.dir();
|
}
|
}
|