java如何使用FTP下载
在进行文件的下载时,我们大多数选的是FTP文件传输的方法,相信大家对这种下载方式还是比较熟悉的。那么有没有试过用java语言,来操作FTP进行下载呢?本篇主要对FTP做了简要的说明,然后对FTP下载思路进行梳理,最后带来FTP下载文件的实例代码展示。
1、FTP说明
FTP是文件传输协议FileTransferProtocol的英文缩写,它是一种TCP/IP协议,属于TCP/IP协议组。双向传送控制文件。与此同时,它也是一种应用(应用程序)。根据不同的操作系统,FTP应用程序各不相同,而且所有这些应用程序都遵循用于传输文件的相同协议。该协议由两部分组成,一是FTP服务器,二是FTP客户端。
2、下载思路
(1)设置文件类型(二进制)
(2)处理ftp对应文件输入流,ftp客户端对象和 ftp文件输入流
(3)处理完毕的文件列表,用于执行文件删除使用
(4)处理当前的文件名称
3、FTP下载实例
/***
* JAVA操作 FTP 下载
* 文件下载。
*
*/
private void ftpDownload()
{
FTPClient ftpClient = null;
InputStream input = null;
boolean loginFlag = false;
List<String> list = new ArrayList<String>();
try
{
int defaultPort = CommonsMessage.FTP_DEFAULT_PORT; // 21
int timeout = M400Constant.NUM_SIXTY_THOUSAND * M400Constant.NUM_TWO; // 120000
ftpClient = new FTPClient();
ftpClient.setDefaultPort(defaultPort);
ftpClient.setConnectTimeout(timeout);
// ftpClient.setSoTimeout(timeout);
ftpClient.setDefaultTimeout(timeout);
ftpClient.setDataTimeout(timeout);
ftpClient.setControlEncoding("UTF-8");
FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX);
conf.setServerLanguageCode("en");
conf.setDefaultDateFormatStr("MMM dd HH:mm");
ftpClient.configure(conf);
ftpClient.connect(SystemConfig.getKey("scpFtpIp"));
loginFlag = ftpClient.login(SystemConfig.getKey("scpFtpUserName").trim(),
SystemConfig.getKey("scpFtpPassword").trim());
String ftpDir = SystemConfig.getKey("ftpHangupDir").trim();
if (!loginFlag)
{
DEBUGGER.debug("login scp ftp is :" + loginFlag);
}
// String ftpDir = SystemConfig.getKey("ftpHangupDir").trim();
if (ftpClient.changeWorkingDirectory(ftpDir))
{
FTPFile file[] = ftpClient.listFiles(ftpDir);
if (file != null && file.length > 0)
{
DEBUGGER.debug("hungup file size is: " + file.length);
for (int i = 0; i < file.length; i++)
{
String fileName = file[i].getName();
ftpClient.setBufferSize(CommonsMessage.ONE_K_BUFFER_SIZE);
// 设置文件类型(二进制)
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
input = ftpClient.retrieveFileStream(fileName);
processInput(ftpClient, input, list, fileName);
// if (downFlag) {
// ftpClient.deleteFile(fileName);
// }
}
}
else
{
try
{
Thread.sleep(M400Constant.NUM_FIVE_THOUSAND);
}
catch (InterruptedException e)
{
/*
* if (DEBUGGER.isDebugEnable()) {
* DEBUGGER.debug("Failed to queryScpToQuery", e); }
*/
error("Failed to queryScpToQuery", e);
}
}
}
else
{
DEBUGGER.debug("scp dir is error ");
}
}
catch (Exception e)
{
/*
* DEBUGGER.debug("dowonload file is faild ", e);
*/
error("dowonload file is faild ", e);
}
finally
{
close(input, "close inputStream is faild ");
if (ftpClient != null)
{
try
{
deleteFile(ftpClient, list);
boolean logoutFlag = false;
try
{
logoutFlag = ftpClient.logout();
// DEBUGGER.debug("logout : " + logoutFlag);
}
catch (Exception e)
{
/*
* DEBUGGER.debug("logout : " + logoutFlag);
*/
error("logout : " + logoutFlag, e);
}
ftpClient = null;
}
catch (Exception e)
{
/*
* if (DEBUGGER.isDebugEnable()) {
* DEBUGGER.error("Failed to ftpDownload", e); }
*/
error("Failed to ftpDownload", e);
}
// try {
// ftpClient.disconnect();
// } catch (IOException e) {
// if (DEBUGGER.isDebugEnable()) {
// DEBUGGER.debug("Failed to ftpDownload", e);
// }
// }
}
}
}
/**
* 处理ftp对应文件输入流。
*
* @param ftpClient
* ftp客户端对象
* @param input
* ftp文件输入流
* @param list
* 处理完毕的文件列表,用于执行文件删除使用
* @param fileName
* 当前处理的文件名称
*/
private void processInput(FTPClient ftpClient, InputStream input, List<String> list, String fileName)
{
if (input == null)
{
return;
}
// boolean downFlag = callingService(input);
callingService(input);
try
{
input.close();
ftpClient.completePendingCommand();
list.add(fileName);
}
catch (Exception e)
{
/*
* DEBUGGER.debug("Failed to ftpDownload", e);
*/
error("Failed to ftpDownload", e);
}
}
}
以上就是java使用FTP下载的方法,大家学会以后可以尝试这种方法,对文件进行一个下载,然后对比与以前下载方式的效率。更多Java学习指路:java下载
以上是 java如何使用FTP下载 的全部内容, 来源链接: utcz.com/z/543351.html