package org.ilp.utils;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
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.FTPListParseEngine;
import org.apache.commons.net.ftp.FTPReply;
import org.ilp.utils.ftp.filter.FTPFileFilterImpl;
public class FtpTest {
public static void main(String[] args) {
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect("192.168.0.190", 21);
ftp.login("ftpuser", "123456x");
ftp.enterLocalPassiveMode();
ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.setRemoteVerificationEnabled(false);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
System.err.println("FTP服务器拒绝连接!");
System.exit(1);
} else {
// 跳转到指定目录下
boolean flag = ftp.changeWorkingDirectory("/TEST/IN/");
if (!flag) {
ftp.makeDirectory("/TEST/IN/");
}
// 默认获取当前目录
FTPListParseEngine engine = ftp.initiateListParsing();
// 分页获取文件
// FTPFile[] files = engine.getNext(10);
// 自定义过滤器
FTPFileFilterImpl filter = new FTPFileFilterImpl();
// 按文件名称过滤
filter.setFileName("DEBMAS");
FTPFile[] files = engine.getFiles(filter);
for (FTPFile ftpFile : files) {
if (ftpFile.isFile()) {
InputStream retrieveFileStream = ftp.retrieveFileStream(ftpFile.getName());
BufferedReader reader = new BufferedReader(new InputStreamReader(retrieveFileStream, "UTF-8"));
String line;
StringBuilder builder = new StringBuilder();
while ((line = reader.readLine()) != null) {
builder.append(line);
}
reader.close();
if (retrieveFileStream != null) {
retrieveFileStream.close();
}
ftp.completePendingCommand();
String xml = builder.toString();
System.out.println(ftpFile.getName() + ":" + xml);
}
}
}
ftp.logout();
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (Exception ioe) {
}
}
}
}
}
package org.ilp.utils.ftp.filter;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPFileFilter;
public class FTPFileFilterImpl implements FTPFileFilter {
private String fileName;
@Override
public boolean accept(FTPFile file) {
String name = file.getName();
if (name.startsWith(fileName)) {
return true;
}
return false;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}
工具类封装
package org.ilp.utils.ftp;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
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.FTPFileFilter;
import org.apache.commons.net.ftp.FTPListParseEngine;
import org.apache.commons.net.ftp.FTPReply;
/**
*
* @author Administrator
*
*/
public class FtpUtils {
private FTPClient ftp;
public FtpUtils() {
}
public FtpUtils(String ip, int port, String userName, String password,String pathname) throws Exception{
this.connectServer(ip, port, userName, password, pathname);
}
/**
* 连接服务器
* @param ip ip地址
* @param port 端口号
* @param userName 用户
* @param password 密码
* @param pathname 跳转到指定的目录
* @throws Exception
*/
public void connectServer(String ip, int port, String userName, String password,String pathname) throws Exception {
try {
ftp = new FTPClient();
ftp.connect(ip, port);
ftp.login(userName, password);
ftp.enterLocalPassiveMode();
ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.setRemoteVerificationEnabled(false);
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
ftp.disconnect();
throw new Exception("FTP服务器拒绝连接!");
} else {
//跳转到指定的位置
boolean flag = ftp.changeWorkingDirectory(pathname);
if(!flag){
ftp.makeDirectory(pathname);
}
}
} catch (Exception e) {
throw new Exception("FTP连接异常!:"+e.getMessage());
}
}
/**
* 关闭连接
*/
public void closeServer() {
if (ftp.isConnected()) {
try {
ftp.logout();
ftp.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 获取到指定文件内容
* @param pathname 文件目录
* @return Map<String,String> key 文件名,value文件内容
*/
public Map<String,String> getXmlData(String pathname){
Map<String,String> map =new HashMap<String,String>();
try {
FTPListParseEngine engine = ftp.initiateListParsing(pathname);
while (engine.hasNext()) {
//分页每次获取10个文件
FTPFile[] files = engine.getNext(10);
for (FTPFile ftpFile : files) {
if (ftpFile.isFile()) {
//获取文件输入流
InputStream retrieveFileStream = ftp.retrieveFileStream(ftpFile.getName());
//获取文件内容
BufferedReader reader = new BufferedReader(new InputStreamReader(retrieveFileStream, "UTF-8"));
String line;
StringBuilder builder = new StringBuilder();
while ((line = reader.readLine()) != null) {
builder.append(line);
}
reader.close();
if (retrieveFileStream != null) {
retrieveFileStream.close();
}
ftp.completePendingCommand();
map.put(ftpFile.getName(), builder.toString());
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return map;
}
/**
* 获取到指定文件内容
* @param filter 过滤器
* @return Map<String,String> key 文件名,value文件内容
*/
public Map<String,String> getXmlData(FTPFileFilter filter){
Map<String,String> map =new HashMap<String,String>();
try {
FTPListParseEngine engine = ftp.initiateListParsing();
FTPFile[] files = engine.getFiles(filter);
for (FTPFile ftpFile : files) {
if (ftpFile.isFile()) {
//获取文件输入流
InputStream retrieveFileStream = ftp.retrieveFileStream(ftpFile.getName());
//获取文件内容
BufferedReader reader = new BufferedReader(new InputStreamReader(retrieveFileStream, "UTF-8"));
String line;
StringBuilder builder = new StringBuilder();
while ((line = reader.readLine()) != null) {
builder.append(line);
}
reader.close();
if (retrieveFileStream != null) {
retrieveFileStream.close();
}
ftp.completePendingCommand();
map.put(ftpFile.getName(), builder.toString());
}
}
} catch (IOException e) {
e.printStackTrace();
}
return map;
}
/**
* 删除文件
* @param fileName 文件名
*/
public void deleteFile(String remote,String fileName) {
try {
ftp.changeWorkingDirectory(remote);
ftp.deleteFile(fileName);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 删除文件
* @param fileName 文件名
*/
public void deleteFile(String fileName) {
try {
ftp.deleteFile(fileName);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 跳转到指定的目录
* @param path 目录
*/
public void gotoDirectory(String path){
try {
ftp.changeWorkingDirectory(path);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @param content 写入文件内容
* @param path 路径
* @param newfilename 文件名称
*/
public void writeFile(String content,String path,String newfilename) {
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmmss");//设置日期格式
// 以当前系统时间拼接文件名
if(newfilename.equalsIgnoreCase("")||newfilename==null)
newfilename = df.format(new Date())+".bak";
InputStream is = null;
try {
is = new ByteArrayInputStream(content.getBytes());
ftp.changeWorkingDirectory(path);
ftp.setBufferSize(1024);
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
ftp.storeFile(new String(newfilename.getBytes("UTF-8"),"utf-8"), is);
} catch (IOException e) {
e.printStackTrace();
}finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
//文件上传
public boolean uploadFile(String fileName,String filePath,String remote) {
boolean flag = false ;
InputStream inputStream = null;
try {
if(!ftp.changeWorkingDirectory(remote)){
ftp.makeDirectory(remote);
}
ftp.changeWorkingDirectory(remote);
inputStream= new FileInputStream(new File(filePath));
flag= ftp.storeFile(fileName, inputStream);
} catch (Exception e) {
System.err.println(e.getMessage());
e.printStackTrace();
} finally {
if(inputStream!=null){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return flag;
}
public boolean uploadFile(String path, String filename, InputStream input) {
boolean success = false;
try {
if(!ftp.changeWorkingDirectory(path)){
ftp.makeDirectory(path);
}
ftp.changeWorkingDirectory(path);
ftp.storeFile(filename, input);
input.close();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (!ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
}
}
return success;
}
}