java调用ftp上传下载文件

该博客介绍了如何使用Java的FTPClient库进行文件的上传和下载操作。通过建立FTP连接,设置连接模式和传输类型,可以实现从远程FTP服务器下载文件到本地,并将本地文件上传到FTP服务器。代码中包含了详细的日志记录,便于调试和跟踪操作状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.htal.msexchange.web.util;


import java.io.File;
import java.io.IOException;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


import com.enterprisedt.net.ftp.FTPClient;
import com.enterprisedt.net.ftp.FTPConnectMode;
import com.enterprisedt.net.ftp.FTPException;
import com.enterprisedt.net.ftp.FTPTransferType;


public final class FtpUtil {


private static Logger logger = LoggerFactory.getLogger(FtpUtil.class);
/**
* 下载文件
* @param ftpip 远程主机IP地址
* @param ftpuser 远程主机FTP用户名
* @param ftppwd 远程主机FTP密码
* @param ftpremotepath 远程主机FTP文件的存放路径
* @param getfilepath 将下载的文件存放在本地的路径
* @return
*/
public static boolean downloadFile(String ftpip,String ftpuser,String ftppwd,String ftpremotepath,String getfilepath) {


logger.info("File Download");

FTPClient ftp = null;


try {


/** 创建FTPClient */
ftp = new FTPClient();
/** 连接服务器 */
ftp.setRemoteHost(ftpip);
ftp.connect();
/** 登陆 */
ftp.login(ftpuser, ftppwd);


/** 以波动模式连接 */
ftp.setConnectMode(FTPConnectMode.PASV);


/** ASCII方式:只能传输一些如txt文本文件, 
* zip、jpg等文件需要使用BINARY方式    
* */
ftp.setType(FTPTransferType.BINARY);


/** 切换到主目录,并枚举主目录的所有文件及文件夹 
* 包括日期、文件大小等详细信息   
* files = ftp.dir("."),则只有文件名 
*/


/** 下载目标文件夹下的所有文件到 指定 目录下 */
File attachments = new File(getfilepath);
/** 如果文件夹不存在,则创建 */
if (!attachments.exists()) {
attachments.mkdir();
}
/** 获取文件夹下的所有文件 */
String[] files = ftp.dir(ftpremotepath, false);


if (files != null && files.length > 0) {
for (int i = 0; i < files.length; i++) {
/** 下载文件 */
String filename = files[i].substring(files[i].lastIndexOf("/")+1);
logger.info("absolute path:"+files[i]);
logger.info("filename:"+filename);

ftp.get(getfilepath + filename, files[i]);


/** 下载后删除文件 */
ftp.delete(files[i]);


logger.info(filename + " File delete OK");
logger.info("下载文件成功!"+filename);

}


} else {
logger.info("无文件需要下载!");
}


return true;

} catch (Exception ex) {
ex.printStackTrace();
logger.error("ftp download file error:" + ex.getMessage());
} finally {
try {
/** 断开连接 */
if (ftp != null)
ftp.quit();
} catch (IOException e) {
e.printStackTrace();
} catch (FTPException e) {
e.printStackTrace();
}
}

return false;
}

/**
* 上传文件
* @param ftpip 远程主机IP地址
* @param ftpuser 远程主机FTP用户名
* @param ftppwd 远程主机FTP密码
* @param ftpremotepath 远程主机FTP文件的存放路径
* @param putfilepath 上传文件存放在本地的路径
* @param filename 上传文件的文件名
* @return
*/
public static boolean uploadFile(String ftpip, String ftpuser, String ftppwd, String ftpremotepath, String putfilepath, String filename) {

logger.info("File Upload");

FTPClient ftp = null; // ftp 客户端实例化

try {

/** 创建FTPClient */
ftp = new FTPClient();
/** 连接服务器 */
ftp.setRemoteHost(ftpip);
ftp.connect();
/** 登陆 */
ftp.login(ftpuser, ftppwd);


/** 以波动模式连接 */
ftp.setConnectMode(FTPConnectMode.PASV);


/** ASCII方式:只能传输一些如txt文本文件, 
* zip、jpg等文件需要使用BINARY方式    
* */
ftp.setType(FTPTransferType.BINARY);

/** 上传文件到服务器指定目录 */
ftp.put(putfilepath + filename, ftpremotepath + filename);


logger.info("上传文件成功!"+filename);

return true;

} catch (Exception ex) {
ex.printStackTrace();
logger.error("ftp upload file error:" + ex.getMessage());
} finally {
try {
/** 断开连接 */
if (ftp != null)
ftp.quit();
} catch (IOException e) {
e.printStackTrace();
} catch (FTPException e) {
e.printStackTrace();
}
}

return false;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值