复制代码代码如下:
/**
*
* JAVA操作 FTP下载
* 文件下载。
*
*/
私有无效 ftpDownload()
{
FTPClient ftpClient = null;
输入流输入=空;
布尔登录标志 = false;
List<String> list = new ArrayList<String>();
尝试
{
int defaultPort = CommonsMessage.FTP_DEFAULT_PORT; // 21
int 超时 = M400Constant.NUM_SIXTY_THOUSAND * M400Constant.NUM_TWO; // 120000
ftpClient = 新的 FTPClient();
ftpClient.setDefaultPort(defaultPort);
ftpClient.setConnectTimeout(超时);
// ftpClient.setSoTimeout(超时);
ftpClient.setDefaultTimeout(超时);
ftpClient.setDataTimeout(超时);
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(登录 scp ftp 是:+ loginFlag);
}
// String ftpDir = SystemConfig.getKey(ftpHangupDir).trim();
如果(ftpClient.changeWorkingDirectory(ftpDir))
{
FTPFile 文件[] = ftpClient.listFiles(ftpDir);
if (文件!= null && file.length > 0)
{
DEBUGGER.debug(挂起的文件大小为:+ file.length);
for (int i = 0; i < 文件长度; i++)
{
String fileName = file[i].getName();
ftpClient.setBufferSize(CommonsMessage.ONE_K_BUFFER_SIZE);
// 设置文件类型(二进制)
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
输入 = ftpClient.retrieveFileStream(文件名);
processInput(ftpClient, 输入, 列表, 文件名);
// 如果 (downFlag) {
// ftpClient.deleteFile(文件名);
// }
}
}
别的
{
尝试
{
Thread.sleep(M400Constant.NUM_FIVE_THOUSAND);
}
捕获(InterruptedException e)
{
/*
* if (DEBUGGER.isDebugEnable()) {
* DEBUGGER.debug(无法查询ScpToQuery, e); }
*/
错误(无法查询ScpToQuery,e);
}
}
}
别的
{
DEBUGGER.debug(scp 目录错误);
}
}
捕获(异常 e)
{
/*
* DEBUGGER.debug(下载文件失败,e);
*/
错误(下载文件失败,e);
}
最后
{
close(输入,关闭inputStream失败);
if (ftpClient != null)
{
尝试
{
删除文件(ftpClient,列表);
布尔 logoutFlag = false;
尝试
{
logoutFlag = ftpClient.logout();
// DEBUGGER.debug(logout : + logoutFlag);
}
捕获(异常 e)
{
/*
* DEBUGGER.debug(注销: + logoutFlag);
*/
错误(注销:+ logoutFlag,e);
}
ftpClient=空;
}
捕获(异常 e)
{
/*
* if (DEBUGGER.isDebugEnable()) {
* DEBUGGER.error(ftp下载失败, e); }
*/
错误(ftp下载失败,e);
}
// 尝试 {
// ftpClient.disconnect();
// } catch (IOException e) {
// 如果 (DEBUGGER.isDebugEnable()) {
// DEBUGGER.debug(ftp下载失败, e);
// }
// }
}
}
}
/**
* 处理ftp对应文件输入流。
*
* @param ftpClient
* ftp客户端对象
* @参数输入
* ftp文件输入流
* @参数列表
* 处理剩余的文件列表,用于执行文件删除使用
* @param 文件名
* 当前处理的文件名称
*/
private void processInput(FTPClient ftpClient, InputStream 输入, List<String> 列表, String 文件名)
{
如果(输入==空)
{
返回;
}
// 布尔 downFlag = CallingService(input);
调用服务(输入);
尝试
{
输入.close();
ftpClient.completePendingCommand();
列表.add(文件名);
}
捕获(异常 e)
{
/*
* DEBUGGER.debug(ftp下载失败,e);
*/
错误(ftp下载失败,e);
}
}
}