java ftp工具类
来源:互联网 发布:经济史专业知乎 编辑:程序博客网 时间:2024/06/05 15:22
/** * 创建于:2015年11月18日 下午3:48:31 * 所属项目: * 文件名称:FtpUtil.java * 作者:test * 版权信息: */package ftp;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 org.apache.commons.net.ftp.FTP;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工具类(未测试) * * @history 2015年11月18日 下午5:37:30 * @author test * @version 0.1.0 */public class FtpUtil {private static Logger logger = Logger.getLogger(FtpUtil.class);/** * 连接到ftp服务器 * @param ip * @param port * @param userName * @param userPwd * @param path */public void connectServer(String ip, int port, String userName, String userPwd, String path) {FTPClient ftpClient = new FTPClient();try {// 连接ftpClient.connect(ip, port);if(FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){ // 登录ftpClient.login(userName, userPwd);if (path != null && path.length() > 0) {// 跳转到指定目录ftpClient.changeWorkingDirectory(path);}}} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/** * 关闭ftp连接 * @param ftpClient */public void disconnect(FTPClient ftpClient) {if (ftpClient.isConnected()) {try {ftpClient.logout();ftpClient.disconnect();} catch (IOException e) {e.printStackTrace();}}}/** * 读取指定目录下的文件名 * @param path * @param ftpClient * @return */public FTPFile[] listFiles(String path, FTPClient ftpClient) {try {return ftpClient.listFiles(path);} catch (IOException e) {e.printStackTrace();}return null;}/** * 下载文件 * @param directory 服务器文件路径 * @param downloadFile 服务器文件名称 * @param saveFile 本地保存的文件名称 * @param ftpClient FTPClient */public void download(String directory, String downloadFile, String saveFile, FTPClient ftpClient){try {if(directory != null && !"".equals(directory)){ftpClient.changeWorkingDirectory(directory);}ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); FTPFile[] files = ftpClient.listFiles(downloadFile); if(files.length != 1){ logger.error(downloadFile + "远程文件不唯一"); return; } File file = new File(saveFile); long lRemoteSize = files[0].getSize(); if(file.exists()){ OutputStream out = new FileOutputStream(file); logger.info("本地" + saveFile + "文件大小为:" + file.length()); if(file.length() >= lRemoteSize){ logger.info("本地文件大小大于远程文件大小,下载中止"); out.close(); return; } ftpClient.setRestartOffset(file.length()); ftpClient.retrieveFile(downloadFile, out); out.close(); }else { OutputStream out = new FileOutputStream(file); ftpClient.retrieveFile(downloadFile, out); out.close(); } } catch (IOException e) {e.printStackTrace();}}/** * 上传文件 * @param uploadFile 本地上传文件名 * @param remote 服务器文件名 * @param ftpClient FTPClient * @throws IOException */public void upload(String uploadFile, String remote, FTPClient ftpClient) throws IOException{ //设置PassiveMode传输 ftpClient.enterLocalPassiveMode(); //设置以二进制流的方式传输 ftpClient.setFileType(FTP.BINARY_FILE_TYPE); //对远程目录的处理 String remoteFileName = remote; if(remote.contains("/")){ remoteFileName = remote.substring(remote.lastIndexOf("/")+1); String directory = remote.substring(0, remote.lastIndexOf("/") + 1); if(!directory.equalsIgnoreCase("/") && !ftpClient.changeWorkingDirectory(directory)){ //如果远程目录不存在,则递归创建远程服务器目录 mkDirectory(directory, ftpClient); } } //检查远程是否存在文件 FTPFile[] files = ftpClient.listFiles(remoteFileName); if(files.length == 1){ long remoteSize = files[0].getSize(); File f = new File(uploadFile); long localSize = f.length(); if(remoteSize == localSize){ logger.info(uploadFile + "文件已存在"); return; }else if(remoteSize > localSize){ logger.info(uploadFile + "远程文件大于本地文件大小,上传终止"); return; } InputStream is = null; try{ //尝试移动文件内读取指针,实现断点续传 is = new FileInputStream(f); if(is.skip(remoteSize) == remoteSize){ ftpClient.setRestartOffset(remoteSize); if(ftpClient.storeFile(remote, is)){ logger.info(uploadFile + "文件上传成功"); return; } } //如果断点续传没有成功,则删除服务器上文件,重新上传 if(!ftpClient.deleteFile(remoteFileName)){ logger.info(remoteFileName + "远程文件删除失败"); return; } if(ftpClient.storeFile(remote, is)){ logger.info(remoteFileName + "文件上传成功"); }else{ logger.info(remoteFileName + "文件上传失败"); } }finally{ if(is != null){ is.close(); } } }else { // 远程文件不存在,直接上传 InputStream is = new FileInputStream(uploadFile); if(ftpClient.storeFile(remoteFileName, is)){ logger.info(remoteFileName + "文件上传成功"); }else{ logger.info(remoteFileName + "文件上传失败"); } is.close(); } } /** * 创建目录 * @param directory 路径名 * @param ftpClient * @throws IOException */private void mkDirectory(String directory, FTPClient ftpClient) throws IOException{int start=0; int end = 0; if(directory.startsWith("/")){ start = 1; }else{ start = 0; } end = directory.indexOf("/", start); while(true){ String subDirectory = directory.substring(start,end); if(!ftpClient.changeWorkingDirectory(subDirectory)){ if(ftpClient.makeDirectory(subDirectory)){ ftpClient.changeWorkingDirectory(subDirectory); }else { logger.info("创建" + subDirectory + "目录失败"); return; } } start = end + 1; end = directory.indexOf("/", start); //检查所有目录是否创建完毕 if(end <= start){ break; } } }}
0 0
- java ftp工具类
- Java FTP工具类
- JAVA的FTP工具类
- Java FTP简单工具类
- JAVA的FTP工具类
- java操作FTP工具类
- Java FTP上传文件工具类
- ftp上传工具类(java)
- java操作FTP服务器通用工具类
- java ftp 工具
- FTP工具(JAVA版)
- FTP工具类(ftp4j)
- C# FTP工具类
- FTP 工具类
- FTP工具类(ftp4j)
- FTP 上传下载工具类
- FTP工具类
- FTP工具类
- Adpter深层优化
- Oracle快捷版安装、使用、基本操作、错误解决
- 在Ubuntu 14.04 LTS系统中设置Apache虚拟主机
- 实习整理(十)
- cannot find implementation of method edt1 KeyDown
- java ftp工具类
- Android 蓝牙(概述)
- 实验1.1
- 对js中的引用类型的理解(5)——Date类型
- ios 中键盘自动隐藏
- cocos2d-x v3.9 关于RotateTo和SkewTo的疑问
- nginx 快速搭建
- Shell脚本:求命令行上所有的整数和
- Android Studio adb无法响应的解决方法