通过org.apache.commons.net.ftp操作文件

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

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;

import com.sun.star.rdf.ParseException;
import com.trs.infra.util.CMyDateTime;
import com.trs.infra.util.CMyException;
import com.trs.infra.util.CMyString;

/**
* Title: <BR>
*
* @author recivejt
* @version 1.0
*/
public class FTPHelper {
private static org.apache.log4j.Logger logger = org.apache.log4j.Logger
.getLogger(FTPHelper.class);

private static FTPClient oFTPClient = null;

public FTPHelper() {
getInstance();
}

public static FTPClient getInstance() {
if (oFTPClient != null) {
return oFTPClient;
}
oFTPClient = new FTPClient();
return oFTPClient;
}

/**
* Description: 链接ftp服务器 <BR>
*
* @author recivejt
* @date 2016年10月12日 下午8:19:53
* @return
*/
public boolean connectFTPServer(String IP, String userName,
String passWord) {
try {
oFTPClient.connect(IP);
oFTPClient.login(userName, passWord);

int reply = oFTPClient.getReplyCode();
// 链接失败
if (!FTPReply.isPositiveCompletion(reply)) {
oFTPClient.disconnect();
return false;
}
oFTPClient.enterLocalPassiveMode();//添加该行代码,使ftp链接进入被动模式。否则在服务器有防火墙设置的时候,可能导致ftp链接成功后,在接下来的访问中出错
return true;
} catch (Exception e) {
e.printStackTrace();
logger.info("FTP服务器链接失败,请检查网络和链接信息是否配置正确!");
return false;
}
}

/**
* Description: 主动关闭链接 <BR>
*
* @author recivejt
* @date 2016年10月12日 下午8:27:11
*/
public void closeServer() {
if (oFTPClient.isConnected()) {
try {
oFTPClient.logout();
oFTPClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* @param path
* @return function:读取指定目录下的文件名
* @throws IOException
*/
public List<String> getFileList(String remoteDir) {
List<String> fileLists = new ArrayList<String>();
// 获得指定目录下所有文件名
FTPFile[] ftpFiles = null;
try {
if (CMyString.isEmpty(remoteDir)) {
ftpFiles = oFTPClient.listFiles();
} else {
try {
ftpFiles = oFTPClient.listFiles(remoteDir);
} catch (Exception e) {
logger.info("获取指定目录下【" + remoteDir + "】的文件出错!");
return fileLists;
}
}

for (int i = 0; i < ftpFiles.length; i++) {
FTPFile oFTPFile = ftpFiles[i];
System.out.println(oFTPFile.getName());
}
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; ftpFiles != null && i < ftpFiles.length; i++) {
FTPFile file = ftpFiles[i];
if (file.isFile()) {
fileLists.add(file.getName());
}
}
return fileLists;
}

/**
* Description: 读取指定目录下的目录名 <BR>
*
* @author recivejt
* @date 2016年10月17日 下午2:59:59
* @return
*/
public List<String> getDirList(String remoteDir) {
List<String> fileLists = new ArrayList<String>();
// 获得指定目录下所有文件名
FTPFile[] ftpFiles = null;
try {
if (CMyString.isEmpty(remoteDir)) {
ftpFiles = oFTPClient.listFiles();
} else {
try {
ftpFiles = oFTPClient.listFiles(remoteDir);
} catch (Exception e) {
logger.info("获取指定目录下【" + remoteDir + "】的文件出错!");
return fileLists;
}
}
for (int i = 0; i < ftpFiles.length; i++) {
FTPFile oFTPFile = ftpFiles[i];
System.out.println(oFTPFile.getName());
}
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; ftpFiles != null && i < ftpFiles.length; i++) {
FTPFile file = ftpFiles[i];
if (file.isDirectory()) {
fileLists.add(file.getName());
}
}
return fileLists;
}

/**
* Description: 下载ftp文件夹加及文件 <BR>
*
* @author recivejt
* @date 2016年8月29日 下午3:30:48
* @throws IOException
* @throws CMyException
*/
public void downloadDirOrFile(String localPath, String remoteDir)
throws IOException, CMyException {
FTPFile[] ftpFiles = null;
// 如果remoteDir是空,则说明是根目录
oFTPClient.enterLocalPassiveMode();// 进入被动模式, 适合于防火墙隔离环境或动态IP,该模式下ftp
// client告诉ftp server开通一个端口来传输数据

if (CMyString.isEmpty(remoteDir)) {
ftpFiles = oFTPClient.listFiles();
} else {
ftpFiles = oFTPClient.listFiles(remoteDir);
}

for (int i = 0; ftpFiles != null && i < ftpFiles.length; i++) {
FTPFile oFTPFile = ftpFiles[i];
String fileName = oFTPFile.getName();
// 如果是文件,则下载到本地
if (oFTPFile.isFile()) {
// 过滤掉不是今天的文件
CMyDateTime oDate = CMyDateTime.now();
String sDate = oDate.getDateTimeAsString("yyyyMMdd");
if (!remoteDir.contains(sDate)) {
continue;
}

// 设置传输文件的类型【文本文件|二进制文件】
oFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
if (isPicture(fileName)) {
oFTPClient.setFileType(FTP.IMAGE_FILE_TYPE);
}

File file = new File(localPath + File.separator + fileName);
FileOutputStream fos = new FileOutputStream(file);
oFTPClient.retrieveFile(remoteDir + File.separator + fileName,
fos);
fos.close();
}
// 如果是文件夹则递归调用
if (oFTPFile.isDirectory()) {
File file = new File(localPath + File.separator + fileName);
if (!file.exists()) {
file.mkdirs();
}

downloadDirOrFile(localPath + File.separator + fileName,
remoteDir + File.separator + fileName);
}
}
}

/**
* Description: 从ftp下载指定的文件到本地指定目录 <BR>
*
* @author recivejt
* @date 2016年10月13日 上午11:34:49
* @param localPath
* @param remoteDir
* 远程路径 /opt/scrb/
* @param filename
* 文件名 a.txt
* @throws IOException
*/
public void downloadAppointFile(String localPath, String remoteDir,
String remotefile) throws IOException {
oFTPClient.enterLocalPassiveMode();

FTPFile[] ftpFiles = oFTPClient.listFiles(remoteDir);

for (int i = 0; ftpFiles != null && i < ftpFiles.length; i++) {
FTPFile oFTPFile = ftpFiles[i];
String fileName = oFTPFile.getName();
if (fileName.equalsIgnoreCase(remotefile)) {
// 设置传输文件的类型【文本文件|二进制文件】
oFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
if (isPicture(fileName)) {
oFTPClient.setFileType(FTP.IMAGE_FILE_TYPE);
}

File file = new File(localPath + File.separator + fileName);
FileOutputStream fos = new FileOutputStream(file);
oFTPClient.retrieveFile(remoteDir + File.separator + fileName,
fos);
fos.close();
}
}
}

/**
* @param fileName
* @return function:从服务器上读取指定的文件
* @throws ParseException
* @throws IOException
*/
public String readFile(String _fileName) throws ParseException {
InputStream ins = null;
StringBuilder builder = null;
try {
// 从服务器上读取指定的文件
ins = oFTPClient.retrieveFileStream(_fileName);
BufferedReader reader = new BufferedReader(
new InputStreamReader(ins, ""));
String line;
builder = new StringBuilder(150);
while ((line = reader.readLine()) != null) {
System.out.println(line);
builder.append(line);
}
reader.close();
if (ins != null) {
ins.close();
}
// 主动调用一次getReply()把接下来的226消费掉. 这样做是可以解决这个返回null问题
oFTPClient.getReply();
} catch (IOException e) {
e.printStackTrace();
}
return builder.toString();
}

/**
* @param fileName
* function:删除文件
*/
public void deleteFile(String fileName) {
try {
oFTPClient.deleteFile(fileName);
} catch (IOException e) {
e.printStackTrace();
}
}

private boolean isPicture(String sFileName) {
// 获得文件后缀名
String tmpName = sFileName.substring(sFileName.lastIndexOf(".") + 1,
sFileName.length());

// 声明图片后缀名数组
String imageArray[] = { "bmp", "", "dib", "gif", "jfif", "jpe", "jpeg",
"jpg", "png", "tif", "tiff", "ico" };

// 遍历名称数组
for (int i = 0; i < imageArray.length; i++) {
if (imageArray[i].equalsIgnoreCase(tmpName)) {
return true;
}
}
return false;
}

public static void main(String[] args) {

}
}

//是不是会暴露公司哦。。。。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值