package com.test.ftp.download;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;
/**
* 使用 FTP 实现文件上传下载<br>
* @author admin
*
*/
public class FavFTPUtil {
public static Logger _log = Logger.getLogger(FavFTPUtil.class);
/**
* 下载文件
*
* @param hostname
* FTP服务器地址
* @param port
* FTP服务器端口号
* @param username
* FTP登录帐号
* @param password
* FTP登录密码
* @param pathname
* FTP服务器文件目录
* @param filename
* 文件名称
* @param localPath
* 下载后的文件路径
* @return
*/
public static boolean downloadFile(String hostname, int port, String username, String password, String pathname,
String filename, String localPath) {
boolean flag = false;
FTPClient ftpClient = new FTPClient();
//传输的字符编码(防乱码)
ftpClient.setControlEncoding("UTF-8");
//超时时间(防止FTP僵死)
ftpClient.setConnectTimeout(1000 * 60);
ftpClient.setDataTimeout(1000 * 60);
ftpClient.setDefaultTimeout(1000 * 60);
//工作流的大小
ftpClient.setBufferSize(1024 * 4);
// 被动模式
ftpClient.enterLocalPassiveMode();
try {
// 连接FTP服务器
ftpClient.connect(hostname, port);
// 登录FTP服务器
ftpClient.login(username, password);
// 验证FTP服务器是否登录成功
int replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
_log.error("Failed to login");
return flag;
}
// 切换FTP目录
ftpClient.changeWorkingDirectory(pathname);
FTPFile[] ftpFiles = ftpClient.listFiles();
_log.info("File number:" + ftpFiles.length);
for (FTPFile file : ftpFiles) {
if (filename.equalsIgnoreCase(file.getName())) {
File localFile = new File(localPath + "/" + file.getName());
OutputStream os = new FileOutputStream(localFile);
_log.info("begin to download file ------------------");
ftpClient.retrieveFile(file.getName(), os);
_log.info("finished !!!");
os.close();
}
}
ftpClient.logout();
flag = true;
} catch (Exception e) {
_log.error(e);
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.logout();
} catch (IOException e) {
}
}
}
return flag;
}
public static void main(String[] args) {
// FTP server account info
String hostname = "192.168.1.2";
int port = 21;
String username = "test";
String password = "abc";
// download file info in FTP server
String pathname = "filePath";
String filename = "file.zip";
// location for downloaded file in local
String localpath = "C:/Data";
downloadFile(hostname, port, username, password, pathname, filename, localpath);
}
}
开发过程中遇到一个问题,一开始server连接成功了,server上文件路径也没有问题,可是ftpClient.listFiles()始终返回empty,后来加上
ftpClient.enterLocalPassiveMode();后才执行成功了。
参考:
https://blog.csdn.net/cainiao_ACCP/article/details/71394891
分享到:
相关推荐
以上就是使用Java实现FTP批量下载文件及解压的主要步骤。这个过程涵盖了FTP连接、文件操作和压缩/解压缩技术,是Java中常见的文件处理任务。在实际应用中,还需要考虑错误处理、线程安全以及可能的性能优化。
以下将详细介绍如何使用Java实现FTP文件上传和下载的步骤,以及涉及到的关键知识点。 首先,Java通过`java.net`和`javax.net`包提供了FTP功能,但这些原生API并不易用。因此,大多数开发人员会使用第三方库如Apache...
本文将深入探讨如何使用Java实现FTP文件的上传和下载功能,以满足标题和描述中的需求。作者宋海康提供的案例将为我们提供一个基础,帮助我们理解这个过程。 首先,我们需要导入Java FTP库,通常是`commons-net`库,...
本文介绍了如何使用 Java 实现 FTP 服务器上的大批量文件的上传和下载,处理大文件的上传和下载。通过 Java 现有的可用的库来编写 FTP 客户端代码,并开发成 Applet 控件,做成基于 Web 的批量、大文件的上传下载...
Java解析FTP服务器文本文件是指使用Java语言连接FTP服务器,上传、下载、递归目录遍历等基本操作的集合。在这个过程中,我们需要引入相关的jar包,例如cpdetector.jar、jchardet-1.0.jar、antlr.jar、commons-...
本篇文章将深入探讨如何使用Java通过SSH和FTP协议来实现从服务器下载文件到本地的操作。 首先,对于SSH连接,Java中通常使用JSch库。JSch是一个纯Java实现的SSH2库,它可以让你连接到一个SSH服务器,执行命令,以及...
Java实现FTP批量大文件上传下载需要选择合适的FTP客户端库,例如J-FTP,并使用Java Applet实现基于Web的FTP客户端。需要考虑安全性问题,例如数字签名、数据加密等。同时,需要选择合适的FTP服务器端程序,例如Serv-...
这篇博客“java ftp上传 下载 文件压缩解压”很可能是关于如何使用Java实现FTP文件上传、下载以及文件的压缩与解压功能。下面我们将深入探讨这些知识点。 首先,FTP上传和下载是Java中常见的任务,通常通过`java...
java使用FTP上传文件,非常实用 包括创建ftp链接,上传
用java语言编写的ftp小工具,可以按指定时间监控ftp服务器,把服务器指定目录内新产生的文件或者文件夹下载到本地指定文件夹,下载后删除数据。 也可以监控本地文件夹,把文件夹内新产生的文件或者文件夹整体上传到...
### JAVA获取FTP文件列表知识点详解 #### 一、概述 在现代软件开发中,FTP(File Transfer Protocol)是一种广泛使用的协议,用于在网络上进行文件传输。本文档将详细介绍一个基于Java的实用工具类`FtpClientUtil`...
在Java编程环境中,FTP(File Transfer Protocol)文件下载是一个常见的任务,特别是在处理大量数据传输时。本场景中,我们关注的重点是如何实现一个功能完善的FTP下载工具,它支持断点续传,即当下载中断后可以从...
以下是一份详细的Java FTP文件读取教程,涵盖了相关的重要知识点。 1. **FTP库的选择**: Java标准库中并没有内置FTP客户端,因此我们需要引入第三方库,如Apache Commons Net库。这个库提供了丰富的FTP功能,包括...
本文将详细讨论如何使用Java连接FTP(File Transfer Protocol)服务器,进行文件的上传、下载、删除以及复制等操作。 首先,Java通过`java.net`和`javax.net`包提供了FTP客户端的功能。主要依赖于`java.net....
本篇文章将深入探讨如何使用Java进行FTP文件传输,并涉及自动解压和压缩的功能。 首先,让我们关注Java中的FTP客户端实现。Apache Commons Net是Java开发中常用的FTP客户端库,它提供了一套完整的API来处理FTP任务...
在Java中实现FTP上传和下载,我们可以利用Apache Commons Net库,它提供了一系列的FTP客户端API,方便我们进行文件操作。以下是对这个主题的详细讲解: 一、Apache Commons Net库介绍 Apache Commons Net是Apache...
在本篇文章中,我们将详细介绍如何使用Java编程语言通过FTP(文件传输协议)实现文件的上传与下载功能,并能够将文件指定上传或下载到特定的服务器目录下。此方法已经过测试验证,能够满足基本的需求,并且代码易于...
### Java下载FTP文件 在实际应用开发中,经常需要与FTP服务器进行交互,比如上传文件、下载文件等操作。Java提供了一套强大的工具和API来实现这些功能。下面我们将通过一个具体的示例来了解如何用Java实现从FTP...
以上步骤详细阐述了如何使用Java实现FTP下载,结合Oracle数据库获取文件地址。在实际应用中,可能还需要处理异常、优化性能、重试机制等复杂情况。对于大型项目,可以考虑使用Spring框架提供的FTP支持,这样可以更...
对于Java开发者而言,掌握如何利用Java进行FTP文件操作是一项基本技能。 #### 一、FTP简介 FTP是一种用于在网络上进行文件传输的应用层协议。它基于客户/服务器模型,通过TCP/IP连接来实现文件的上传和下载。FTP...