ftp工具类
来源:互联网 发布:开淘宝网店 编辑:程序博客网 时间:2024/05/21 13:26
===============================================================
package com.suning.search.admin.web.util;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.SocketException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import org.apache.commons.io.FileUtils;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPFile;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * ftp下载文件类 * * */public class FtpUtils { private final static Logger logger = LoggerFactory.getLogger(FtpUtils.class); private String ftpUrl; private String ftpAccount; private String ftpPassword; public final static String BI_TEMP_FILE = "/opt/search/admin/bi/"; static { File biDir = new File(BI_TEMP_FILE); if (!biDir.exists()) { biDir.mkdirs(); } } public FtpUtils() { super(); } public FtpUtils(String ftpUrl, String ftpAccount, String ftpPassword) { super(); this.ftpUrl = ftpUrl; this.ftpAccount = ftpAccount; this.ftpPassword = ftpPassword; } public String downloadFile(String path, String fileName, String localPath) { FTPClient fc = new FTPClient(); String ret = null; try { fc.connect(ftpUrl); fc.user(ftpAccount); fc.pass(ftpPassword); logger.info("链接服务器:" + fc.isConnected()); logger.info("切换目录:" + fc.changeWorkingDirectory(path)); FTPFile[] files = fc.listFiles(); File dir = new File(localPath); if (!dir.exists()) { dir.mkdir(); } for (FTPFile file : files) { if (file.getName().startsWith((fileName))) { logger.info("开始下载:" + file.getName()); long begin = System.currentTimeMillis(); File localFile = new File(localPath + file.getName()); if (!localFile.exists()) { localFile.createNewFile(); } OutputStream is = new FileOutputStream(localFile); fc.retrieveFile(file.getName(), is); is.close(); ret = file.getName(); logger.info("下载结束,耗时:" + (System.currentTimeMillis() / 1000 - begin / 1000) + "秒"); } } } catch (SocketException e) { logger.error("下载BI文件时出现错误", e); } catch (IOException e) { logger.error("下载BI文件时出现错误", e); } return ret; } public boolean uploadFile(String path, String fileName, String localFile) { FTPClient fc = new FTPClient(); boolean result = true;// 文件上传是否成功 try { fc.connect(ftpUrl); fc.user(ftpAccount); fc.pass(ftpPassword); logger.info("链接服务器:" + fc.isConnected()); logger.info("切换目录:" + path + " : " + changeDirectory(path, fc)); FTPFile[] files = fc.listFiles(); for (FTPFile ftpFile : files) { if (ftpFile.isFile() && ftpFile.getName().equals(fileName)) { fc.deleteFile(ftpFile.getName()); } } InputStream input = new FileInputStream(localFile); result = fc.storeFile(fileName, input); input.close(); } catch (SocketException e) { logger.error("下载BI文件时出现错误", e); } catch (IOException e) { logger.error("下载BI文件时出现错误", e); } return result; } public void removeFiles(String path) { FTPClient fc = new FTPClient(); try { fc.connect(ftpUrl); fc.user(ftpAccount); fc.pass(ftpPassword); logger.info("链接服务器:" + fc.isConnected()); logger.info("切换目录:" + fc.changeWorkingDirectory(path)); FTPFile[] files = fc.listFiles(); for (FTPFile file : files) { if (file.isFile()) { fc.deleteFile(file.getName()); } } } catch (SocketException e) { logger.error("删除文件时出现错误", e); } catch (IOException e) { logger.error("删除文件时出现错误", e); } } /** * 通过前缀下载文件 * * @param preStr 前缀 * @return 文件名 */ public String downloadFiles(String preStr, String localPath) { FTPClient fc = new FTPClient(); try { fc.connect(ftpUrl); fc.user(ftpAccount); fc.pass(ftpPassword); logger.info("链接服务器:" + fc.isConnected()); logger.info("切换目录:" + fc.changeWorkingDirectory("/etldata/output/net_search")); FTPFile[] files = fc.listFiles(); logger.info("开始处理前缀为" + preStr + "的CSV文件"); String fileName = getFileName(preStr); File dir = new File(localPath); if (!dir.exists()) { dir.mkdir(); } for (FTPFile file : files) { if (file.getName().equals(fileName)) { logger.info("开始下载:" + file.getName()); long begin = System.currentTimeMillis(); File localFile = new File(localPath + fileName); if (!localFile.exists()) { localFile.createNewFile(); } OutputStream is = new FileOutputStream(localFile); fc.retrieveFile(file.getName(), is); is.close(); logger.info("下载结束,耗时:" + (System.currentTimeMillis() / 1000 - begin / 1000) + "秒"); } } return fileName; } catch (SocketException e) { logger.error("下载BI文件时出现错误", e); } catch (IOException e) { logger.error("下载BI文件时出现错误", e); } return null; } /** * 通过前缀下载文件 * * @param preStr 前缀 * @return 文件名 */ public String downloadFiles(String preStr) { FTPClient fc = new FTPClient(); try { fc.connect(ftpUrl); fc.user(ftpAccount); fc.pass(ftpPassword); logger.info("链接服务器:" + fc.isConnected()); logger.info("切换目录:" + fc.changeWorkingDirectory("/etldata/output/net_search")); FTPFile[] files = fc.listFiles(); logger.info("开始处理前缀为" + preStr + "的CSV文件"); String fileName = getFileName(preStr); File dir = new File(BI_TEMP_FILE); if (!dir.exists()) { dir.mkdir(); } for (FTPFile file : files) { if (file.getName().equals(fileName)) { logger.info("开始下载:" + file.getName()); long begin = System.currentTimeMillis(); File localFile = new File(BI_TEMP_FILE + fileName); if (!localFile.exists()) { localFile.createNewFile(); } OutputStream is = new FileOutputStream(localFile); fc.retrieveFile(file.getName(), is); is.close(); logger.info("下载结束,耗时:" + (System.currentTimeMillis() / 1000 - begin / 1000) + "秒"); } } return fileName; } catch (SocketException e) { logger.error("下载BI文件时出现错误", e); } catch (IOException e) { logger.error("下载BI文件时出现错误", e); } return null; } public String[] downloadMonthFiles(String preStr) { FTPClient fc = new FTPClient(); try { fc.connect(ftpUrl); fc.user(ftpAccount); fc.pass(ftpPassword); logger.info("链接服务器:" + fc.isConnected()); logger.info("切换目录:" + fc.changeWorkingDirectory("/etldata/output/net_search")); FTPFile[] files = fc.listFiles(); logger.info("开始处理前缀为" + preStr + "的CSV文件"); String[] fileNames = getMonthFileNames(preStr); for (String fileName : fileNames) { for (FTPFile file : files) { if (file.getName().equals(fileName)) { logger.info("开始下载:" + file.getName()); long begin = System.currentTimeMillis(); File localFile = new File(BI_TEMP_FILE + fileName); if (!localFile.exists()) { localFile.createNewFile(); } OutputStream is = new FileOutputStream(localFile); fc.retrieveFile(file.getName(), is); is.close(); logger.info("下载结束,耗时:" + (System.currentTimeMillis() / 1000 - begin / 1000) + "秒"); } } } return fileNames; } catch (SocketException e) { logger.error("下载BI文件时出现错误", e); } catch (IOException e) { logger.error("下载BI文件时出现错误", e); } return null; } // ftp切换目录,不存在就创建 public boolean changeDirectory(String path, FTPClient ftp) { FTPFile[] files; boolean result = false; String[] str = path.split("/"); for (String s : str) { try { boolean exist = false;// 路径是否存在 files = ftp.listFiles(); for (FTPFile f : files) { if (f.isDirectory() && !"".equals(s) && f.getName().equals(s)) { exist = true; } } if (!exist) { ftp.makeDirectory(s); } result = ftp.changeWorkingDirectory(s); } catch (IOException e) { logger.error("连接FTP异常", e); } } return result; } @SuppressWarnings("deprecation") public String getFileName(String preStr) { Date date = new Date(); date.setDate(date.getDate() - 1); String fileName = null; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); fileName = preStr + sdf.format(date) + ".CSV"; return fileName; } public String[] getMonthFileNames(String preStr) { Calendar calendar = new GregorianCalendar(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DAY_OF_MONTH); Calendar currentDay = new GregorianCalendar(year, month, day); String[] fileNames = new String[30]; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); for (int i = 0; i < fileNames.length; i++) { fileNames[i] = preStr + sdf.format(currentDay.getTime()) + ".CSV"; logger.info(fileNames[i]); currentDay.add(Calendar.DATE, -1); } return fileNames; } public void deleteFiles() { File dir = new File(BI_TEMP_FILE); File[] files = dir.listFiles(); for (File file : files) { FileUtils.deleteQuietly(file); } } public String getFtpUrl() { return ftpUrl; } public void setFtpUrl(String ftpUrl) { this.ftpUrl = ftpUrl; } public String getFtpAccount() { return ftpAccount; } public void setFtpAccount(String ftpAccount) { this.ftpAccount = ftpAccount; } public String getFtpPassword() { return ftpPassword; } public void setFtpPassword(String ftpPassword) { this.ftpPassword = ftpPassword; }}=====================================================
http://www.cxyclub.cn/n/10536/
1、远程FTP服务连接 2、FTP上传文件 3、FTP下载文件,注意:在下载多个文件时,必须执行:ftpClient.completePendingCommand();否则,is = ftpClient.retrieveFileStream(file.getName());返回NUll 4、FTP文件的删除 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPClientConfig; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import org.apache.log4j.Logger; /** * ftp上传下载类 * @author * */ public class BankReceiptFTPUtil { private Logger logger = Logger.getLogger(BankReceiptFTPUtil.class); private String ip ; private int port; private String pwd; private String user; private FTPClient ftpClient; public BankReceiptFTPUtil(String ip, int port, String user, String pwd) { this.ip = ip; this.port = port; this.user = user; this.pwd = pwd; } /** * 连接FTP服务器 * @param ip ip地址 * @param port 端口号 * @param user 用户名 * @param pwd 密码 * @return * @throws Exception */ public boolean connectServer(String ip, int port, String user, String pwd) throws Exception { boolean isSuccess = false; try { ftpClient = new FTPClient(); ftpClient.connect(ip, port); ftpClient.setControlEncoding("GBK"); FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT); conf.setServerLanguageCode("zh"); ftpClient.login(user, pwd); ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); if(FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { isSuccess = true; } else { ftpClient.disconnect(); logger.error("连接ftp服务器异常!"); throw new BossOperException(); } } catch (Exception e) { logger.error("连接FTP服务器异常.." ,e); } return isSuccess ; } /** * 远程FTP下载文件 * @param remotePath * @param localPath * @param fileName * @return * @throws Exception */ public List<File> downloadFile(String remotePath, String localPath, List<File> files) throws Exception { List<File> result = new ArrayList<File>(); File fileOut = null ; InputStream is = null ; FileOutputStream os = null ; try { if(connectServer(this.getIp(), this.getPort(), this.getUser(), this.getPwd())) { ftpClient.changeWorkingDirectory(remotePath); FTPFile[] ftpFiles = ftpClient.listFiles(); for(FTPFile file : ftpFiles) { is = ftpClient.retrieveFileStream(file.getName()); if(localPath != null && !localPath.endsWith(File.separator)) { localPath = localPath + File.separator; File path = new File(localPath); if(!path.exists()) { path.mkdirs(); } } fileOut = new File(localPath + file.getName()); os = new FileOutputStream(fileOut); byte[] bytes = new byte[1024]; int c ; while((c=is.read(bytes)) != -1) { os.write(bytes, 0, c); } result.add(fileOut); ftpClient.completePendingCommand(); os.flush(); is.close(); os.close(); } for(FTPFile file : ftpFiles) { ftpClient.deleteFile(file.getName()); } } } catch(Exception e) { logger.error("从FTP服务器下载文件异常:", e); } finally { ftpClient.logout(); if(ftpClient.isConnected()) { ftpClient.disconnect(); } } return result; } /** * FTP上传文件 * @param remotePath * @param localPath * @param files * @return * @throws Exception */ public File uploadFile(String remotePath, List<File> files) throws Exception { File fileIn = null; OutputStream os = null; FileInputStream is = null; try { for(File file : files) { if(connectServer(this.getIp(), this.getPort(), this.getUser(), this.getPwd())) { ftpClient.changeWorkingDirectory(remotePath); os = ftpClient.storeFileStream(file.getName()); fileIn = file; is = new FileInputStream(fileIn); byte[] bytes = new byte[1024]; int c ; while((c=is.read(bytes)) != -1) { os.write(bytes, 0, c); } } } } catch(Exception e) { logger.error("上传FTP文件异常: ", e); } finally { os.close() ; is.close(); ftpClient.logout(); if(ftpClient.isConnected()) { ftpClient.disconnect(); } } return fileIn; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } }
0 0
- FTP工具类(ftp4j)
- C# FTP工具类
- FTP 工具类
- FTP工具类(ftp4j)
- FTP 上传下载工具类
- FTP工具类
- FTP工具类
- ftp工具类
- FTP上传下载工具类
- FTP上传工具类
- FTP工具类
- ftp工具类
- ftp上传工具类
- java ftp工具类
- ftp上传工具类
- Java FTP工具类
- ftp上传下载工具类
- ftp工具类
- B/S和C/S的区别(总结的好全)
- ios应用审核的几种状态
- 工作中经常用的Jquery
- Java中两个Map的加减
- Ubuntu 12.04右键在当前位置打开终端
- ftp工具类
- Android--标签组件(TabHost)小实例
- STM32串口使用printf()没输出东西(Use MicroLib)
- SGU 200 Cracking RSA (高斯消元+大数高精度)
- view上添加点手势 button无法响应点击事件
- 复制一个AP来监听流量
- Matlab代码转C
- vim 设置大全
- ubuntu 12.04 设置dns