JAVA代码实现FTP文件下载

JAVA代码实现FTP文件下载JAVA实现FTP文件下载

大家好,又见面了,我是你们的朋友全栈君。

一、下载commons-net-1.4.1.jar包,放到lib下,并加载到.classpath文件中

二、编写工具类FtpUtil.java如下

package common;

import java.io.File;  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.OutputStream;  
import java.net.SocketException;  
import java.util.Properties;
import org.apache.log4j.Logger;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.ftp.*;


public class FtpUtil {

	private final static Log logger = LogFactory.getLog(FtpUtil.class);

	/**
	 * 获取FTPClient对象
	 *
	 * @param ftpHost
	 *            FTP主机服务器
	 * @param ftpPassword
	 *            FTP 登录密码
	 * @param ftpUserName
	 *            FTP登录用户名
	 * @param ftpPort
	 *            FTP端口 默认为21
	 * @return
	 */
	public static FTPClient getFTPClient(String ftpHost, String ftpUserName,
			String ftpPassword, int ftpPort) {
		FTPClient ftpClient = new FTPClient();
		try {
			ftpClient = new FTPClient();
			ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器
			ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器
			if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
				logger.info("未连接到FTP,用户名或密码错误。");
				ftpClient.disconnect();
			} else {
				logger.info("FTP连接成功。");
			}
		} catch (SocketException e) {
			e.printStackTrace();
			logger.info("FTP的IP地址可能错误,请正确配置。");
		} catch (IOException e) {
			e.printStackTrace();
			logger.info("FTP的端口错误,请正确配置。");
		}
		return ftpClient;
	}

	/*
	 * 从FTP服务器下载文件
	 * 
	 * @param ftpHost FTP IP地址
	 * 
	 * @param ftpUserName FTP 用户名
	 * 
	 * @param ftpPassword FTP用户名密码
	 * 
	 * @param ftpPort FTP端口
	 * 
	 * @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa
	 * 
	 * @param localPath 下载到本地的位置 格式:H:/download
	 * 
	 * @param fileName 文件名称
	 */
	public static void downloadFtpFile(String ftpHost, String ftpUserName,
			String ftpPassword, int ftpPort, String ftpPath, String localPath,
			String fileName) {

		FTPClient ftpClient = null;

		try {
			ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
			ftpClient.setControlEncoding("UTF-8"); // 中文支持
			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
			ftpClient.enterLocalPassiveMode();
			ftpClient.changeWorkingDirectory(ftpPath);

			File localFile = new File(localPath + File.separatorChar + fileName);
			OutputStream os = new FileOutputStream(localFile);
			ftpClient.retrieveFile(fileName, os);
			os.close();
			ftpClient.logout();

		} catch (FileNotFoundException e) {
			logger.error("没有找到" + ftpPath + "文件");
			e.printStackTrace();
		} catch (SocketException e) {
			logger.error("连接FTP失败.");
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
			logger.error("文件读取错误。");
			e.printStackTrace();
		}

	}



}

三、测试代码

假设已经存在一个FTP服务器,登录的用户名和密码为zyf,端口为22,登后的家目录下进入ftpdir目录,下面有一个11.txt文件用于下载测试 

package scripts.testscript;

import org.testng.annotations.Test;

import common.FtpUtil;

public class FtpDownloadTestScript {
	@Test
	public void run() {
		
		String ftpHost = "192.168.26.132";
		String ftpUserName = "zyf";
		String ftpPassword = "zyf";
		int ftpPort = 21;
		String ftpPath = "ftpdir/";
		String localPath = "H:/download";
		String fileName = "11.txt";
		FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName);
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137760.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于html5的PostMessage的用法总结

    关于html5的PostMessage的用法总结  大家都知道,网页直接传递数据可以使用ajax请求来完成,今天我总结下我学习的postMessage是如何完成跨页面请求数据的呢?首先,postMessage是html5新增的一个解决跨域的一个方法。那他是如何使用的呢?这里我把一个案例分享出来把。看下面的代码:test.html<!DOCTYPEhtml><html><head> <titl…

    2022年7月13日
  • 最详细AMD Ryzen CPU,VMware 15安装macOS 10.15.x Catalina 记录(第一篇)[通俗易懂]

    最详细AMD Ryzen CPU,VMware 15安装macOS 10.15.x Catalina 记录(第一篇)[通俗易懂]如何在非macOS电脑上体验macOS,目前我所知道的有两种方式:真机安装(难度大,本文介绍,感兴趣的童鞋可以自行搜索);虚拟机安装。不管是真机安装还是虚拟机安装,Intel的cpu在安装过程中遇到的坑相比AMD的cpu要少很多。所以本文不介绍如何在Intelcpu的pc上安装macOS,网上教程很多,读者可自行搜索。很多AMDcpu的朋友,在用虚拟机安装macOS的过程中,肯定遇到过一些问题,并且有些问题很棘手,会被困扰几天,那么本文将介绍如何在AMDcpu的电脑上安装mac

    2022年5月13日
  • nslookup指定服务器是什么命令,nslookup命令详解_nslookup命令指定dns[通俗易懂]

    nslookup指定服务器是什么命令,nslookup命令详解_nslookup命令指定dns[通俗易懂]nslookup命令作用是用于查询dns解析域名记录,一般我们使用都是通过此命令可以检测DNS是否正常或者有时候我们把域名A记录更改的ip址,通常更改A记录需要一定的时间才生效,我们可以通过此命令解析域名的A记录是否生效。在windows操作系统上使用前nslookup首先我们要打开命令提示符,具体步骤如下:1、点击左下角的开始菜单–>运行。2、在弹出的运行窗口中输入“CMD”然后点击“确…

    2022年10月18日
  • ftp上传工具如何下载和使用像详细教程

    ftp上传工具如何下载和使用像详细教程在学习网站搭建的过程中,我们必定会用到ftp上传工具,那么ftp工具是什么呢,我们该如何下载和使用呢?FTP(FileTransferProtocol),简称是文件传输的协议,我们可以用这个协议在互联网上做文件的双向传输,让我们用自己的计算机,可以链接到世界各地具有文件传输协议的ftp服务器进行连接,从而可以访问,传输下载大量的共享文件。同样我们可以从网站空间服务器中下载拷贝需要的文件到自己的…

    2022年5月22日
  • httprunner(5)编写测试用例

    httprunner(5)编写测试用例编写测试用例HttpRunnerv3.x支持三种测试用例格式pytest,YAML和JSON。官方强烈建议以pytest格式而不是以前的YAML/JSON格式编写和维护测试用例格式关系如下图所示

    2022年7月31日
  • 正则表达式判断字符有乱码(正则文法转正则表达式)

    #include<QtCore/QCoreApplication>#include<iostream>#include<string>#include<regex>usingnamespacestd;intmain(intargc,char*argv[]){ QCoreApplicationa(argc,argv); boolfoundmatch=false; try{ std::wregexre(L

    2022年4月11日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号