package com.iteye.utl; import com.coship.epg.entity.response.ResponseConstants; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.net.SocketException; import java.util.ArrayList; import java.util.List; /** * FTP工具类 * Created by 909501 on 2015/2/4. */ public class FtpUtil { private static final Logger logger = LoggerFactory.getLogger(FtpUtil.class); private FTPClient ftpClient; /** * 使用详细信息进行服务器连接 * @param server:服务器地址名称 * @param port:端口号 * @param user:用户名 * @param password:用户密码 * @param path:转移到FTP服务器目录 * @throws SocketException * @throws IOException */ public void connectServer(String server, int port, String user, String password, String path) throws SocketException, IOException { ftpClient = new FTPClient(); ftpClient.connect(server, port); logger.info("Connected to " + server + "."); ftpClient.login(user, password); if (path!=null&&path.length() != 0) { changeDirectory(path); } } public boolean isConnected() throws SocketException, IOException{ boolean isConnected =false; if(ftpClient.isConnected()){ isConnected = true; ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//设置文件传输类型为二进制 ftpClient.setBufferSize(1024);//设置上传缓存大小 ftpClient.setControlEncoding("UTF-8");//设置编码 int reply=ftpClient.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)){ isConnected = false; closeServer(); logger.error("FTP sever refused connectd.ReplyCode: " + ftpClient.getReplyCode()); } } return isConnected; } /** * 设置传输文件类型:FTP.BINARY_FILE_TYPE | FTP.ASCII_FILE_TYPE * 二进制文件或文本文件 * @param fileType * @throws IOException */ public void setFileType(int fileType) throws IOException { ftpClient.setFileType(fileType); } /** * 关闭连接 * @throws IOException */ public void closeServer() throws IOException { if (ftpClient!=null&&ftpClient.isConnected()) { ftpClient.logout();//退出FTP服务器 ftpClient.disconnect();//关闭FTP连接 } } /** * 转移到FTP服务器工作目录 * @param path * @return * @throws IOException */ public boolean changeDirectory(String path) throws IOException { return ftpClient.changeWorkingDirectory(path); } /** * 在服务器上创建目录 * @param pathName * @return * @throws IOException */ public boolean createDirectory(String pathName) throws IOException { return ftpClient.makeDirectory(pathName); } /** * 在服务器上删除目录 * @param path * @return * @throws IOException */ public boolean removeDirectory(String path) throws IOException { return ftpClient.removeDirectory(path); } /** * 删除所有文件和目录 * @param path * @param isAll true:删除所有文件和目录 * @return * @throws IOException */ public boolean removeDirectory(String path, boolean isAll) throws IOException { if (!isAll) { return removeDirectory(path); } FTPFile[] ftpFileArr = ftpClient.listFiles(path); if (ftpFileArr == null || ftpFileArr.length == 0) { return removeDirectory(path); } // for (FTPFile ftpFile : ftpFileArr) { String name = ftpFile.getName(); if (ftpFile.isDirectory()) { logger.info("* [sD]Delete subPath ["+path + "/" + name+"]"); removeDirectory(path + "/" + name, true); } else if (ftpFile.isFile()) { logger.info("* [sF]Delete file ["+path + "/" + name+"]"); deleteFile(path + "/" + name); } else if (ftpFile.isSymbolicLink()) { } else if (ftpFile.isUnknown()) { } } return ftpClient.removeDirectory(path); } /** * 检查目录在服务器上是否存在 true:存在 false:不存在 * @param path * @return * @throws IOException */ public boolean existDirectory(String path) throws IOException { boolean flag = false; FTPFile[] ftpFileArr = ftpClient.listFiles(path); for (FTPFile ftpFile : ftpFileArr) { if (ftpFile.isDirectory() && ftpFile.getName().equalsIgnoreCase(path)) { flag = true; break; } } return flag; } /** * 得到文件列表,listFiles返回包含目录和文件,它返回的是一个FTPFile数组 * listNames():只包含目录的字符串数组 * String[] fileNameArr = ftpClient.listNames(path); * @param path:服务器上的文件目录:/DF4 */ public List<String> getFileList(String path) throws IOException { FTPFile[] ftpFiles= ftpClient.listFiles(path); //通过FTPFileFilter遍历只获得文件 /*FTPFile[] ftpFiles2= ftpClient.listFiles(path,new FTPFileFilter() { @Override public boolean accept(FTPFile ftpFile) { return ftpFile.isFile(); } }); */ List<String> retList = new ArrayList<String>(); if (ftpFiles == null || ftpFiles.length == 0) { return retList; } for (FTPFile ftpFile : ftpFiles) { if (ftpFile.isFile()) { retList.add(ftpFile.getName()); } } return retList; } /** * 删除服务器上的文件 * @param pathName * @return * @throws IOException */ public boolean deleteFile(String pathName) throws IOException { return ftpClient.deleteFile(pathName); } /** * 上传文件到ftp服务器 * 在进行上传和下载文件的时候,设置文件的类型最好是: * ftpUtil.setFileType(FtpUtil.BINARY_FILE_TYPE) * localFilePath:本地文件路径和名称 * remoteFileName:服务器文件名称 */ public boolean uploadFile(String localFilePath, String remoteFileName) throws IOException { boolean flag = false; InputStream iStream = null; try { iStream = new FileInputStream(localFilePath); //我们可以使用BufferedInputStream进行封装 //BufferedInputStream bis=new BufferedInputStream(iStream); //flag = ftpClient.storeFile(remoteFileName, bis); flag = ftpClient.storeFile(remoteFileName, iStream); } catch (IOException e) { flag = false; logger.error(ResponseConstants.FTP_SERVER_ERROR, e.getStackTrace()); return flag; } finally { if (iStream != null) { iStream.close(); } } return flag; } /** * 上传文件到ftp服务器,上传新的文件名称和原名称一样 * @param fileName:文件名称 * @return * @throws IOException */ public boolean uploadFile(String fileName) throws IOException { return uploadFile(fileName, fileName); } /** * 上传文件到ftp服务器 * @param iStream 输入流 * @param newName 新文件名称 * @return * @throws IOException */ public boolean uploadFile(InputStream iStream, String newName) throws IOException { boolean flag = false; try { flag = ftpClient.storeFile(newName, iStream); } catch (IOException e) { flag = false; return flag; } finally { if (iStream != null) { iStream.close(); } } return flag; } /** * 从ftp服务器上下载文件到本地 * @param remoteFileName:ftp服务器上文件名称 * @param localFileName:本地文件名称 * @return * @throws IOException */ public boolean download(String remoteFileName, String localFileName) throws IOException { boolean flag = false; File outfile = new File(localFileName); OutputStream oStream = null; try { oStream = new FileOutputStream(outfile); //我们可以使用BufferedOutputStream进行封装 //BufferedOutputStream bos=new BufferedOutputStream(oStream); //flag = ftpClient.retrieveFile(remoteFileName, bos); flag = ftpClient.retrieveFile(remoteFileName, oStream); } catch (IOException e) { flag = false; logger.error(ResponseConstants.FTP_SERVER_ERROR, e.getStackTrace()); return flag; } finally { oStream.close(); } return flag; } /** * 从ftp服务器上下载文件到本地 * @param sourceFileName:服务器资源文件名称 * @return InputStream 输入流 * @throws IOException */ public InputStream downFile(String sourceFileName) throws IOException { return ftpClient.retrieveFileStream(sourceFileName); } public static void main(String[] args) { FtpUtil ftpUtil=new FtpUtil(); try { ftpUtil.connectServer("10.9.217.3", FTPClient.DEFAULT_PORT, "test", "lgq", null); //获得ftp服务器上目录名称为DF4下的所有文件名称 List<String> list=ftpUtil.getFileList("/test/"); System.out.println("文件名称列表为:"+list); //上传本地D盘文件aaa.txt到服务器,服务器上名称为bbb.txt ftpUtil.uploadFile("d:\\90950112345.id", "/test/" + "90950112345.id"); //从服务器上下载文件bbb.txt到本地d盘名称为ccc.txt //ftpUtil.download("eee.txt", "d:" + File.separator + "fff.txt"); //删除ftp服务器上文件:bbb.txt //ftpUtil.deleteFile("bbb.txt"); } catch (IOException e) { e.printStackTrace(); } } }
相关推荐
ftp工具类,构造方法初始化类,连接ftp,列出所有文件内容,下载文件
FTP 工具类,赚钱积分下载东西,谢谢各位!谢谢各位!
ftp工具类,帮助你很容易的实现ftp功能
java操作FTP工具类:实现基本断点上传下载、实现上传下载进度汇报、实现中文目录创建及中文文件创建,添加对于中文的支持
FTP工具类,包括:文件夹上传下载,文件删除(包括非空文件夹),重命名等操作 基本的操作应该都有
在本文中,我们将深入探讨如何利用这个库开发一个FTP工具类,以便在Java应用程序中进行文件上传、下载和其他FTP操作。 首先,我们需要了解FTP的基本概念。FTP是一种用于在网络上进行文件传输的标准协议。它允许用户...
ftp操作工具类,用户ftp文件的添加,删除,等操作!
Java ftp工具类,可以实现ftp上传,读取,目录切换,内容创建,目录创建、检查文件是否存在,支持主动方式和被动方式读取
jdk1.7以上专用FTP工具类,本人花了半天时间调试通过,拿来即用,具体用法详见main函数。
对于初学者来说,理解并使用这样的FTP工具类可以帮助他们快速掌握FTP操作,避免了重复编写相同功能的代码。同时,这个工具类也展示了如何在Java中利用第三方库(如Apache Commons Net)来扩展Java标准库的功能。 ...
接下来,我们将深入探讨FTP工具类的主要功能、使用方法以及源码分析。 **1. FTPClient类** FTPClient是Apache Commons Net的核心类,它实现了FTP协议的大部分功能。通过这个类,我们可以连接到FTP服务器,执行登录...
Apache FTPClient操作FTP工具类
本话题将详细介绍如何使用Java实现FTP工具类以及所需的jar包。 Apache Commons Net是一个强大的Java网络实用程序库,它提供了多种网络协议的实现,包括FTP。在这个场景中,`commons-net-3.3.jar`是这个库的一个版本...
org.apache.commons.net.ftp.FTPClient FTP工具类,实现上传、下载、压缩到输出流下载等功能
Java FTP工具类是Java开发中用于处理FTP(File Transfer Protocol)协议的一种实用程序,它使得在Java应用程序中上传、下载、删除或者管理远程服务器上的文件变得简单。在本压缩包中,我们有一个名为"util"的文件,...
ftp 上传时,用到的工具类,项目上配置好ftp服务器后,controller可以方便的调用此工具类进行上传
ftp工具类,包含文件上传,文件删除,文件列表,查询当天文件类表方法
java的ftp工具类,需要的自行下载查看,有切换目录,创建目录方法。
本文将详细介绍标题和描述中提到的几个关键知识点:Java中的zip、rar(包括处理带密码的RAR文件)、gz压缩,以及FTP工具类的使用。 1. **Java ZIP压缩与解压缩**: Java内置的`java.util.zip`包提供了处理ZIP文件...
采用java实现FTP文件的上传下载,包含文件以及文件夹上传下载,新建文件夹等基本相关操作,不会出现文件名的中文乱码,内含demo相关测试以及jar包,可直接导入使用,采用MyEclipse8.5,jdk1.6亲测无问题