java操作FTP工具类

来源:互联网 发布:视频相片制作软件 编辑:程序博客网 时间:2024/05/18 13:05

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class FTPUtil {
private static final Logger logger = LoggerFactory.getLogger(FTPUtil.class);
private FTPClient ftpClient;
private boolean flag = false;// FTP的连接是否成功(成功true,失败)
private String charset = "UTF-8";
private String ip;
private int port;
private String loginName;
private String password;
private String ftpStoreFileSeparator;

// public static void main(String[] args) {
// FTPUtil ftp = new FTPUtil("10.83.14.156",21, "user", "bquser", null);
// //linux环境貌似用的是UTF-8
// ftp.upload(new File("D:\\document\\统计\\640.jpg"), "\\test12\\test\\", "图片2.jpg");
// ftp.upload(new File("D:\\document\\统计\\640.jpg"), "\\report\\", "图片哈哈哈.jpg");
// System.out.println("connect success");
// System.out.println("report\\图片哈哈哈.jpg");
// }

// public static void main(String[] args) {
// FTPUtil ftp = new FTPUtil("10.83.22.73",21, "slsfinace", "123456", null);
// //linux环境貌似用的是UTF-8
// boolean a = ftp.upload(new File("D:\\document\\统计\\640.jpg"), "\\report\\", "图片哈哈哈.jpg");
// System.out.println(a);
// System.out.println("connect success");
// System.out.println("report\\图片哈哈哈.jpg");
//}

/**
* FTP初始化

* @param ip
* @param loginName
* @param password
*/
public FTPUtil(String ip, int port, String loginName, String password, String charset, String ftpStoreFileSeparator) {
this.ip = ip;
this.port = port;
this.loginName = loginName;
this.password = password;
this.charset = charset;
this.ftpStoreFileSeparator = ftpStoreFileSeparator;
ftpClient = new FTPClient();
if (checkNotNull(ip) && checkNotNull(loginName) && checkNotNull(password)) {
if (checkNotNull(charset)) {
ftpClient.setControlEncoding(charset);
} else {
ftpClient.setControlEncoding(this.charset);
}
ftpClient.setBufferSize(1024 * 1024);// 向目标服务器写入文件缓冲大小限制
try {
ftpClient.connect(ip,port);
flag = ftpClient.login(loginName, password);
flag = ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);// 设置文件类型(二进制)
} catch (SocketException e) {
logger.error(e.getMessage(), e);
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
}


/**
* 关闭连接
*/
public boolean close() {
boolean flag = false;
try {
if (ftpClient!=null && ftpClient.isConnected()) {
flag = ftpClient.logout();
}
} catch (IOException e) {
logger.warn(e.getMessage(), e);
}
return flag;
}


/**
* 重命名文件

* @param from
* @param to
* @return
*/
public boolean rename(String from, String to)
{
boolean flag = false;
if (checkNotNull(from) && checkNotNull(to)) {
try {
flag = ftpClient.rename(from, to);
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
return flag;
}


/**
* 删除文件

* @param str
* @return
*/
public boolean deleteFile(String str) {
boolean flag = false;
if (checkNotNull(str)) {
try {
flag = ftpClient.deleteFile(str);
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
return flag;
}

/**
* 创建远程目录
* @param remotePath 不含文件名的远程路径(格式为/a/b/c)
* @return 
*/
private boolean createRemoteFolder(String ftpFolder) throws IOException{
boolean flag = false;
String[] folders = ftpFolder.split(ftpStoreFileSeparator);
String remoteTempPath = "";
for(String folder : folders){
if(StringUtils.isNotBlank(folder)){
remoteTempPath += ftpStoreFileSeparator + folder;
flag = ftpClient.changeWorkingDirectory(remoteTempPath);
if(!flag){
flag = ftpClient.makeDirectory(remoteTempPath);
}
}
}
return flag;
}

/**
* 上传文件
* @param localFile 本地文件
* @param ftpFolder FTP服务器目录,以"\"(Windows)或"/"(Linux)开头
* @param ftpFileName 放在ftp时的文件名
* @return
*/
public boolean upload(File localFile, String ftpFolder, String ftpFileName) {
boolean flag = false;
FileInputStream fis = null;
if (checkNotNull(ftpFolder) && checkNotNull(ftpFileName) && this.flag) {
try {
fis = new FileInputStream(localFile);
flag = ftpClient.changeWorkingDirectory(ftpFolder);// 设置上传目录(/FI_voucher/)
if (!flag) {
// flag = ftpClient.makeDirectory(ftpFolder);
flag = createRemoteFolder(ftpFolder);
}
if (flag) {
flag = ftpClient.changeWorkingDirectory(ftpFolder);// 设置上传目录(/FI_voucher/)
}
if (flag){
flag = ftpClient.storeFile(ftpFileName, fis);// node.lib
}
} catch (FileNotFoundException e) {
logger.error(e.getMessage(), e);
} catch (IOException e) {
logger.error(e.getMessage(), e);
} finally {
IOUtils.closeQuietly(fis);
}
}
return flag;
}

/**
* 上传文件

* @param localFilePath
*            本地路径
* @param ftpFilePath
*            FTP服务器路径
* @return
*/
public boolean upload(String localFilePath, String ftpFolder, String ftpFileName) {
boolean flag = false;
if (checkNotNull(localFilePath) && checkNotNull(ftpFolder) && checkNotNull(ftpFileName)) {
File srcFile = new File(localFilePath);
flag = this.upload(srcFile, ftpFolder, ftpFileName);
}
return flag;
}


/**
* 下载文件

* @param localFilePath
*            本地路径
* @param ftpFilePath
*            FTP服务器路径
* @return
*/
public boolean download(String localFilePath, String ftpFilePath) {
boolean flag = false;
FileOutputStream fos = null;
if (checkNotNull(localFilePath) && checkNotNull(ftpFilePath) && this.flag) {
try {
fos = new FileOutputStream(localFilePath);// c:\\node.lib
flag = ftpClient.retrieveFile(ftpFilePath, fos);// /FI_voucher/node.lib
} catch (FileNotFoundException e) {
logger.error(e.getMessage(), e);
} catch (IOException e) {
logger.error(e.getMessage(), e);
} finally {
IOUtils.closeQuietly(fos);
}
}
return flag;
}


/**
* 检查String是否为空

* @param str
* @return 为空返回false,不为空返回true
*/
private boolean checkNotNull(String str) {
boolean flag = false;
if (StringUtils.isNotBlank(str)) {
flag = true;
}
return flag;
}


public String getCharset() {
return charset;
}


public String getIp() {
return ip;
}


public int getPort() {
return port;
}


public String getLoginName() {
return loginName;
}


public String getPassword() {
return password;
}


public String getFtpStoreFileSeparator() {
return ftpStoreFileSeparator;
}

}
原创粉丝点击