FtpClientService package com.skylink.eos.common;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.SocketExcep
package com.skylink.eos.common;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketException;
import java.util.ArrayList;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
/**
* FTP 工具类
*
* @author atimin
*
*/
public class FtpClientService {
/**
* FTP客户端
*/
private FTPClient ftp;
public static final int BINARY_FILE_TYPE = FTP.BINARY_FILE_TYPE;
public static final int ASCII_FILE_TYPE = FTP.ASCII_FILE_TYPE;
/**
* 初始化客户端并完成对服务端的连接
*
* @param server
* 服务端地址
* @param port
* 端口号
* @param username
* 用户名
* @param password
* 密码
* @param path
* 远程路径 值可以为空
* @throws SocketException
* @throws IOException
*/
public void connectServer(String server, int port, String username, String password, String path) throws SocketException,
IOException {
ftp = new FTPClient();
ftp.connect(server, port);
ftp.setDataTimeout(120000);
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
ftp.disconnect();
System.out.println(server + " 拒绝连接");
}
ftp.login(username, password);
if (path.length() != 0) {
ftp.changeWorkingDirectory(path);
}
}
/**
* 设置ftp的文件传输类型
*
* @param fileType
* 如:FTP.BINARY_FILE_TYPE
* @throws IOException
*/
public void setFileType(int fileType) throws IOException {
ftp.setFileType(fileType);
}
/**
* 关闭ftp连接
*
* @throws IOException
*/
public void logout() throws IOException {
if (ftp != null && ftp.isConnected()) {
ftp.logout();
ftp.disconnect();
}
}
/**
* 改变ftp的工作目录
*
* @param path
* @return
* @throws IOException
*/
public boolean changeDirectory(String path) throws IOException {
return ftp.changeWorkingDirectory(path);
}
/**
* 在服务端创建目录
*
* @param pathName
* 可以是相对目录或绝对目录
* @return
* @throws IOException
*/
public boolean createDirectory(String pathName) throws IOException {
return ftp.makeDirectory(pathName);
}
/**
* 删除一个FTP服务器上的目录(如果为空)
*
* @param path
* 目录路径
* @return
* @throws IOException
*/
public boolean removeDirectory(String path) throws IOException {
return ftp.removeDirectory(path);
}
/**
* 删除一个FTP服务器上的目录
*
* @param path
* 目录路径
* @param isAll
* 是否删除所有子目录和文件,如果有
* @return
* @throws IOException
*/
public boolean removeDirectory(String path, boolean isAll) throws IOException {
if (!isAll) {
return removeDirectory(path);
}
// 遍历子目录和文件
FTPFile[] ftpFileArr = ftp.listFiles(path);
if (ftpFileArr == null || ftpFileArr.length == 0) {
return removeDirectory(path);
}
for (int i = 0; i < ftpFileArr.length; i++) {
FTPFile ftpFile = ftpFileArr[i];
String name = ftpFile.getName();
if (ftpFile.isDirectory()) {
removeDirectory(path + "/" + name, true);
} else if (ftpFile.isFile()) {
deleteFile(path + "/" + name);
} else if (ftpFile.isSymbolicLink()) {
} else if (ftpFile.isUnknown()) {
}
}
return removeDirectory(path);
}
/**
* 返回给定目录下的文件
*
* @param path
* @return FTPFile组成的集合
* @throws IOException
*/
public ArrayList fileNames(String path) {
ArrayList retList = new ArrayList();
try {
FTPFile[] ftpFiles = ftp.listFiles(path);
if (ftpFiles == null || ftpFiles.length == 0) {
return retList;
}
for (int i = 0; i < ftpFiles.length; i++) {
FTPFile ftpFile = ftpFiles[i];
if (ftpFile.isFile()) {
retList.add(ftpFile.getName());
}
}
} catch (Exception ex) {
}
return retList;
}
/**
* 读取目录列表
*
* @param path
* @return
*/
public ArrayList listFiles(String path) {
ArrayList retList = new ArrayList();
try {
FTPFile[] ftpFiles = ftp.listFiles(path);
if (ftpFiles == null || ftpFiles.length == 0) {
return retList;
}
for (int i = 0; i < ftpFiles.length; i++) {
FTPFile ftpFile = ftpFiles[i];
if (ftpFile.isDirectory()) {
retList.add(ftpFile.getName());
}
}
} catch (Exception ex) {
}
return retList;
}
/**
* 删除文件
*
* @param pathName
* 文件名
* @return 删除结果,是否成功.
* @throws IOException
*/
public boolean deleteFile(String pathName) throws IOException {
return ftp.deleteFile(pathName);
}
/**
* 上传文件,并重命名.
*
* @param fileName
* 上传的文件,包含目录的文件名
* @param newName
* 新的文件名
* @return 上传结果,是否成功.
* @throws IOException
*/
public boolean upFile(String fileName, String newName) throws IOException {
boolean flag = false;
InputStream iStream = null;
try {
iStream = new FileInputStream(fileName);
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
flag = ftp.storeFile(newName, iStream);
} catch (IOException e) {
flag = false;
return flag;
} finally {
if (iStream != null) {
iStream.close();
}
}
return flag;
}
/**
* 上传文件,从InputStream
*
* @param iStream
* 文件流
* @param newName
* 新的文件名
* @return 上传结果,是否成功.
* @throws IOException
*/
public boolean upFile(InputStream iStream, String newName) throws IOException {
boolean flag = false;
try {
flag = ftp.storeFile(newName, iStream);
} catch (IOException e) {
flag = false;
return flag;
} finally {
if (iStream != null) {
iStream.close();
}
}
return flag;
}
/**
* 下载文件
*
* @param remoteFileName
* 远程文件名
* @param localFileName
* 本地文件
* @return 返回操作结果
* @throws IOException
*/
public boolean downFile(String remoteFileName, String localFileName) {
boolean flag = false;
try {
File outfile = new File(localFileName);
OutputStream oStream = null;
try {
oStream = new FileOutputStream(outfile);
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
flag = ftp.retrieveFile(remoteFileName, oStream);
} catch (IOException e) {
flag = false;
return flag;
} finally {
oStream.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return flag;
}
/**
* 移动FTP文件
*
* @param remoteSrc
* @param remoteDst
* @return
*/
public boolean moveRemoteFile(String remoteSrc, String remoteDst) {
boolean flag = false;
try {
try {
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
flag = ftp.rename(remoteSrc, remoteDst);
} catch (IOException e) {
flag = false;
return flag;
}
} catch (Exception ex) {
ex.printStackTrace();
}
return flag;
}
public FTPClient getFtp() {
return ftp;
}
public void setFtp(FTPClient ftp) {
this.ftp = ftp;
}
}
