java ftp 类_java----ftp工具类

本文档介绍了FtpUtil类,用于Apache Commons FTP库进行FTP连接管理,包括连接建立、文件上传、下载链接配置及文件同步。重点展示了如何通过Ftp对象实现FTP连接的获取、关闭,以及如何高效上传和下载文件到远程服务器。
摘要由CSDN通过智能技术生成

packagecom.kexin.common.util;importcom.kexin.admin.entity.ftp.Ftp;importorg.apache.commons.net.ftp.FTPClient;importorg.apache.commons.net.ftp.FTPFile;importorg.apache.commons.net.ftp.FTPReply;importorg.apache.log4j.Logger;import java.io.*;public classFtpUtil {private static Logger logger = Logger.getLogger(FtpUtil.class);private staticFTPClient ftp;/*** 获取ftp连接

*

*@paramf

*@return*@throwsException*/

public static boolean connectFtp(Ftp f) throwsException {

ftp= newFTPClient();boolean flag = false;intreply;if (f.getPort() == null) {

ftp.connect(f.getIpAddr(),21);

}else{

ftp.connect(f.getIpAddr(), f.getPort());

}

ftp.login(f.getUserName(), f.getPwd());

ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

reply=ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {

ftp.disconnect();returnflag;

}

ftp.changeWorkingDirectory(f.getPath());

flag= true;returnflag;

}/*** 关闭ftp连接*/

public static voidcloseFtp() {if (ftp != null &&ftp.isConnected()) {try{

ftp.logout();

ftp.disconnect();

}catch(IOException e) {

e.printStackTrace();

}

}

}/*** ftp上传文件

*

*@paramf

*@throwsException*/

public static void upload(File f) throwsException {

ftp.setControlEncoding("GBK");if(f.isDirectory()) {

ftp.makeDirectory(f.getName());

ftp.changeWorkingDirectory(f.getName());//ftp.setControlEncoding("utf-8");

String[] files =f.list();for(String fstr : files) {

File file1= new File(f.getPath() + "/" +fstr);if(file1.isDirectory()) {

upload(file1);

ftp.changeToParentDirectory();

}else{

File file2= new File(f.getPath() + "/" +fstr);

FileInputStream input= newFileInputStream(file2);

ftp.storeFile(file2.getName(), input);

input.close();

}

}

}else{

File file2= newFile(f.getPath());

FileInputStream input= newFileInputStream(file2);

ftp.storeFile(file2.getName(), input);

input.close();

}

}/*** 下载链接配置

* 本地与,远程地址同步,将所有文件都下载到本地

*@paramf

*@paramlocalBaseDir 本地目录

*@paramremoteBaseDir 远程目录

*@throwsException*/

public static void startDown(Ftp f, String localBaseDir, String remoteBaseDir) throwsException {if(FtpUtil.connectFtp(f)) {try{

FTPFile[] files= null;boolean changedir =ftp.changeWorkingDirectory(remoteBaseDir);if(changedir) {

ftp.setControlEncoding("GBK");//ftp.setControlEncoding("utf-8");

files =ftp.listFiles();for (int i = 0; i < files.length; i++) {try{

downloadFile(files[i], localBaseDir, remoteBaseDir);

}catch(Exception e) {

logger.error(e);

logger.error("下载失败");

}

}

}

}catch(Exception e) {

logger.error(e);

logger.error("下载过程中出现异常");

}

}else{

logger.error("链接失败!");

}

}/*** 下载FTP文件

* 当你需要下载FTP文件的时候,调用此方法

* 根据获取的文件名,本地地址,远程地址进行下载

*

*@paramftpFile

*@paramrelativeLocalPath

*@paramrelativeRemotePath*/

private static voiddownloadFile(FTPFile ftpFile, String relativeLocalPath, String relativeRemotePath) {if(ftpFile.isFile()) {if (ftpFile.getName().indexOf("?") == -1) {

OutputStream outputStream= null;try{

File locaFile= new File(relativeLocalPath +ftpFile.getName());//判断文件是否存在,存在则返回

if(locaFile.exists()) {return;

}else{

outputStream= new FileOutputStream(relativeLocalPath +ftpFile.getName());

ftp.setControlEncoding("GBK");

ftp.retrieveFile(ftpFile.getName(), outputStream);

outputStream.flush();

outputStream.close();

}

}catch(Exception e) {

logger.error(e);

}finally{try{if (outputStream != null) {

outputStream.close();

}

}catch(IOException e) {

logger.error("输出文件流异常");

}

}

}

}else{

String newlocalRelatePath= relativeLocalPath +ftpFile.getName();

String newRemote= new String(relativeRemotePath +ftpFile.getName().toString());

File fl= newFile(newlocalRelatePath);if (!fl.exists()) {

fl.mkdirs();

}try{

newlocalRelatePath= newlocalRelatePath + '/';

newRemote= newRemote + "/";

String currentWorkDir=ftpFile.getName().toString();boolean changedir =ftp.changeWorkingDirectory(currentWorkDir);if(changedir) {

FTPFile[] files= null;

files=ftp.listFiles();for (int i = 0; i < files.length; i++) {

downloadFile(files[i], newlocalRelatePath, newRemote);

}

}if(changedir) {

ftp.changeToParentDirectory();

}

}catch(Exception e) {

logger.error(e);

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值