- 浏览: 232947 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
tonyyan:
谢谢分享!
Kafka 监控 -
dtyu100:
反手就是一个赞,这相当于是官网druid.io的中文版本,很厉 ...
Druid 大数据分析之快速应用(单机模式) -
sqy:
2018-04-12T01:30:27,527 ERROR [ ...
Druid 大数据分析之快速应用(单机模式) -
wangyudong:
学习了,不错的Spring boot实例,参考着很快写出了RE ...
Spring boot 入门实例 -
string2020:
servlet4规范出来了,求翻译
Java Servlet3.1规范
本人参考Apache Common-net 2.2 的Api以及官方网的测试代码而写的FTP客户端操作实例,此外引用了dom4j开源包用于将FTP服务器的目录结构保存成XML文件。需实现断点续传的功能,还请高手多多指教。
更新一下第469、474、474行的代码:
提供源码:(只需配置好一台Ftp服务器即可用)
package com.shine.Ftp.util; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; 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.FTPListParseEngine; import org.apache.commons.net.ftp.FTPReply; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; public class FtpHelper { private FTPClient ftp = null; /** * Ftp服务器 */ private String server; /** * 用户名 */ private String uname; /** * 密码 */ private String password; /** * 连接端口,默认21 */ private int port = 21; private Document document ; public FtpHelper(String server, int port, String uname, String password){ this.server = server; if (this.port > 0){ this.port = port; } this.uname = uname; this.password = password; //初始化 ftp = new FTPClient(); } /** * 连接FTP服务器 * * @param server * @param uname * @param password * @return * @throws Exception */ public FTPClient connectFTPServer() throws Exception { try { ftp.configure(getFTPClientConfig()); ftp.connect(this.server, this.port); if (!ftp.login(this.uname, this.password)) { ftp.logout(); ftp = null; return ftp; } // 文件类型,默认是ASCII ftp.setFileType(FTPClient.BINARY_FILE_TYPE); ftp.setControlEncoding("GBK"); // 设置被动模式 ftp.enterLocalPassiveMode(); ftp.setConnectTimeout(2000); ftp.setBufferSize(1024); // 响应信息 int replyCode = ftp.getReplyCode(); if ((!FTPReply.isPositiveCompletion(replyCode))) { // 关闭Ftp连接 closeFTPClient(); // 释放空间 ftp = null; throw new Exception("登录FTP服务器失败,请检查![Server:" + server + "、" + "User:" + uname + "、" + "Password:" + password); } else { return ftp; } } catch (Exception e) { ftp.disconnect(); ftp = null; throw e; } } /** * 配置FTP连接参数 * * @return * @throws Exception */ public FTPClientConfig getFTPClientConfig() throws Exception { String systemKey = FTPClientConfig.SYST_NT; String serverLanguageCode = "zh"; FTPClientConfig conf = new FTPClientConfig(systemKey); conf.setServerLanguageCode(serverLanguageCode); conf.setDefaultDateFormatStr("yyyy-MM-dd"); return conf; } /** * 向FTP根目录上传文件 * * @param localFile * @param newName * 新文件名 * @throws Exception */ public Boolean uploadFile(String localFile, String newName) throws Exception { InputStream input = null; boolean success = false; try { File file = null; if (checkFileExist(localFile)) { file = new File(localFile); } input = new FileInputStream(file); success = ftp.storeFile(newName, input); if (!success) { throw new Exception("文件上传失败!"); } } catch (Exception e) { throw e; } finally { if (input != null) { input.close(); } } return success; } /** * 向FTP根目录上传文件 * * @param input * @param newName * 新文件名 * @throws Exception */ public Boolean uploadFile(InputStream input, String newName) throws Exception { boolean success = false; try { success = ftp.storeFile(newName, input); if (!success) { throw new Exception("文件上传失败!"); } } catch (Exception e) { throw e; } finally { if (input != null) { input.close(); } } return success; } /** * 向FTP指定路径上传文件 * * @param localFile * @param newName * 新文件名 * @param remoteFoldPath * @throws Exception */ public Boolean uploadFile(String localFile, String newName, String remoteFoldPath) throws Exception { InputStream input = null; boolean success = false; try { File file = null; if (checkFileExist(localFile)) { file = new File(localFile); } input = new FileInputStream(file); // 改变当前路径到指定路径 if (!this.changeDirectory(remoteFoldPath)) { System.out.println("服务器路径不存!"); return false; } success = ftp.storeFile(newName, input); if (!success) { throw new Exception("文件上传失败!"); } } catch (Exception e) { throw e; } finally { if (input != null) { input.close(); } } return success; } /** * 向FTP指定路径上传文件 * * @param input * @param newName * 新文件名 * @param remoteFoldPath * @throws Exception */ public Boolean uploadFile(InputStream input, String newName, String remoteFoldPath) throws Exception { boolean success = false; try { // 改变当前路径到指定路径 if (!this.changeDirectory(remoteFoldPath)) { System.out.println("服务器路径不存!"); return false; } success = ftp.storeFile(newName, input); if (!success) { throw new Exception("文件上传失败!"); } } catch (Exception e) { throw e; } finally { if (input != null) { input.close(); } } return success; } /** * 从FTP服务器下载文件 * * @param remotePath * FTP路径(不包含文件名) * @param fileName * 下载文件名 * @param localPath * 本地路径 */ public Boolean downloadFile(String remotePath, String fileName, String localPath) throws Exception { BufferedOutputStream output = null; boolean success = false; try { // 检查本地路径 this.checkFileExist(localPath); // 改变工作路径 if (!this.changeDirectory(remotePath)) { System.out.println("服务器路径不存在"); return false; } // 列出当前工作路径下的文件列表 List<FTPFile> fileList = this.getFileList(); if (fileList == null || fileList.size() == 0) { System.out.println("服务器当前路径下不存在文件!"); return success; } for (FTPFile ftpfile : fileList) { if (ftpfile.getName().equals(fileName)) { File localFilePath = new File(localPath + File.separator + ftpfile.getName()); output = new BufferedOutputStream(new FileOutputStream( localFilePath)); success = ftp.retrieveFile(ftpfile.getName(), output); } } if (!success) { throw new Exception("文件下载失败!"); } } catch (Exception e) { throw e; } finally { if (output != null) { output.close(); } } return success; } /** * 从FTP服务器获取文件流 * * @param remoteFilePath * @return * @throws Exception */ public InputStream downloadFile(String remoteFilePath) throws Exception { return ftp.retrieveFileStream(remoteFilePath); } /** * 获取FTP服务器上指定路径下的文件列表 * * @param filePath * @return */ public List<FTPFile> getFtpServerFileList(String remotePath) throws Exception { FTPListParseEngine engine = ftp.initiateListParsing(remotePath); List<FTPFile> ftpfiles = Arrays.asList(engine.getNext(25)); return ftpfiles; } /** * 获取FTP服务器上[指定路径]下的文件列表 * * @param path * @return * @throws Exception */ public List<FTPFile> getFileList(String remotePath) throws Exception { List<FTPFile> ftpfiles = Arrays.asList(ftp.listFiles(remotePath)); return ftpfiles; } /** * 获取FTP服务器[当前工作路径]下的文件列表 * * @param path * @return * @throws Exception */ public List<FTPFile> getFileList() throws Exception { List<FTPFile> ftpfiles = Arrays.asList(ftp.listFiles()); return ftpfiles; } /** * 改变FTP服务器工作路径 * * @param remoteFoldPath */ public Boolean changeDirectory(String remoteFoldPath) throws Exception { return ftp.changeWorkingDirectory(remoteFoldPath); } /** * 删除文件 * * @param remoteFilePath * @return * @throws Exception */ public Boolean deleteFtpServerFile(String remoteFilePath) throws Exception { return ftp.deleteFile(remoteFilePath); } /** * 创建目录 * * @param remoteFoldPath * @return */ public boolean createFold(String remoteFoldPath) throws Exception { boolean flag = ftp.makeDirectory(remoteFoldPath); if (!flag) { throw new Exception("创建目录失败"); } return false; } /** * 删除目录 * @param remoteFoldPath * @return * @throws Exception */ public boolean deleteFold(String remoteFoldPath) throws Exception { return ftp.removeDirectory(remoteFoldPath) ; } /** * 删除目录以及文件 * * @param remoteFoldPath * @return */ public boolean deleteFoldAndsubFiles(String remoteFoldPath) throws Exception { boolean success = false; List<FTPFile> list = this.getFileList(remoteFoldPath); if (list == null || list.size() == 0) { return deleteFold(remoteFoldPath); } for (FTPFile ftpFile : list) { String name = ftpFile.getName(); if (ftpFile.isDirectory()) { success = deleteFoldAndsubFiles(remoteFoldPath + "/" + name); if (!success) break; } else { success = deleteFtpServerFile(remoteFoldPath + "/" + name); if (!success) break; } } if (!success) return false; success = deleteFold(remoteFoldPath); return success; } /** * 检查本地路径是否存在 * * @param filePath * @return * @throws Exception */ public boolean checkFileExist(String filePath) throws Exception { boolean flag = false; File file = new File(filePath); if (!file.exists()) { throw new Exception("本地路径不存在,请检查!"); } else { flag = true; } return flag; } /** * 创建XML文件 * @return */ public Element getCurrentElement(){ document = DocumentHelper.createDocument(); return document.addElement("root"); } /** * 生成目录XML文件 */ public void createDirectoryXML(String remotePath,Element fatherElement) throws Exception{ List<FTPFile> list = this.getFileList(); for(FTPFile ftpfile:list){ Element currentElement = fatherElement; //当前的目录节点 String newRemotePath = remotePath+ftpfile.getName(); if(ftpfile.isDirectory()){ Element dirElement = fatherElement.addElement("dir") ; dirElement.addAttribute("name",ftpfile.getName()); currentElement = dirElement; this.changeDirectory(newRemotePath); //从根目录开始 createDirectoryXML(newRemotePath,dirElement); }else{ Element fileElement = fatherElement.addElement("file");//文件节点 fileElement.setText(ftpfile.getName()) ; } } } /** * 保存xml */ public void saveXML(){ XMLWriter output = new XMLWriter(); //输出格式化 OutputFormat format = OutputFormat.createPrettyPrint(); try { output = new XMLWriter(new FileWriter("src/com/shine/Ftp/config/dir.xml"), format); output.write(this.document); output.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 关闭FTP连接 * * @param ftp * @throws Exception */ public void closeFTPClient(FTPClient ftp) throws Exception { try { if (ftp.isConnected()) ftp.logout(); ftp.disconnect(); } catch (Exception e) { throw new Exception("关闭FTP服务出错!"); } } /** * 关闭FTP连接 * * @throws Exception */ public void closeFTPClient() throws Exception { this.closeFTPClient(this.ftp); } /** * Get Attribute Method * */ public FTPClient getFtp() { return ftp; } public String getServer() { return server; } public String getUname() { return uname; } public String getPassword() { return password; } public int getPort() { return port; } /** * Set Attribute Method * */ public void setFtp(FTPClient ftp) { this.ftp = ftp; } public void setServer(String server) { this.server = server; } public void setUname(String uname) { this.uname = uname; } public void setPassword(String password) { this.password = password; } public void setPort(int port) { this.port = port; } /** * 主方法(测试) * * 问题:上传时命名的新文件名不能有中文,否则上传失败. * * @param args */ public static void main(String[] args) { try { FtpHelper fu = new FtpHelper("192.168.2.18", 21, "administrator","sunshine"); fu.connectFTPServer(); Element fatherElement = fu.getCurrentElement(); fu.createDirectoryXML("/", fatherElement); fu.saveXML(); } catch (Exception e) { System.out.println("异常信息:" + e.getMessage()); } } }
更新一下第469、474、474行的代码:
String newRemotePath = (remotePath+"/"+ftpfile.getName()).replaceAll("//","/"); String currentWorkPath = this.printWorkingDirectory(); createDirectoryXML(currentWorkPath,dirElement);
提供源码:(只需配置好一台Ftp服务器即可用)
- FtpHelper.rar (3.3 KB)
- 下载次数: 554
- commons-net-2.2.jar (207.5 KB)
- 下载次数: 435
- dom4j-1.6.1.jar (306.5 KB)
- 下载次数: 285
发表评论
-
数据接入ElasticSearch方式培训PPT
2018-01-28 11:53 1900写道 数据接入ElasticSearch几种方式总结,涉及 ... -
Apache ftp tools 图片下载支持中文
2017-12-05 23:55 1246写道 Apache Commom net:1) 递归pat ... -
FtpURLConnection 图片下载编码问题
2017-12-05 23:13 858写道 问题:1)Web项目中下载图片,存在下载不全,丢失部 ... -
Kafka 监控
2017-11-18 00:31 5777背景概述 写道 kafka0.9及以前版本ka ... -
Spring Cloud之OAuth2
2017-07-08 12:04 11405备:附件中OAuth2 授权服务器实现源码及PPT 一 ... -
Spring Cloud之Configuration Server
2017-05-19 22:51 1499为什么用spring cloud config 写道 一 ... -
Java Servlet3.1规范
2016-11-25 20:33 1246目录 前言........................ ... -
JMX监控(MBean)
2016-11-23 22:16 4104一、引言 写道 随着企业 IT 规模的不断增长,IT 资 ... -
哈希表在JAVA中如何实现
2016-11-23 20:42 2917一、 复习一下基础知识 1. 截断低位与抹除高位 ... -
Spring boot 入门实例
2016-10-29 00:33 4876写道 Spring Boot是由Pivotal团队提供的全 ... -
Java计算两点经纬度距离及最短运行时间
2016-09-12 21:20 2586概述 经纬度在地图应用中常见,一般结合路网信息库, ... -
计算机软件开源技术、大数据技术等资源教程
2016-08-24 13:01 582基于时间序列化数据引擎排名,很多OLAP工具,根据自身业务 ... -
代码单元与代码点
2016-08-16 17:46 692代码单元与代码点 代码点指编码表(比如Unicode)中某 ... -
Java模块化解决方案
2016-08-15 00:19 4192网络上很多OSGi的文章上来就Activator实例, ... -
深入浅出ClassLoader
2016-08-13 17:06 749你真的了解ClassLoader吗? 这篇文章翻译自zer ... -
Generate axis server code from wsdl
2016-08-04 00:34 12451、为什么需要生成服 ... -
Spring DAO设计实战
2016-01-23 12:21 3263引用 提供不同数据源和方言实现智能分页,因Spring单例 ... -
JAVA NIO 之三
2016-01-17 00:35 1724引用 本节采用JDK1.5之后java.util.con ... -
JAVA NIO 之二
2016-01-14 00:35 1973引用 继上节利用JAVA NIO实现简单数据传,本节实现自定 ... -
JAVA NIO 之一
2016-01-12 14:14 1566传统IO 写道 网络传输 ...
相关推荐
implementation 'org.apache.commons:commons-net:3.6' // 使用最新版本替代3.3 } ``` 然后,我们需要创建一个FTP客户端实例并配置连接参数,如服务器地址、端口号、用户名和密码。以下是一个简单的FTP连接示例: ...
Apache Commons Net库(common-net)主要处理各种网络协议,包括FTP、Telnet、NNTP等。FTP部分提供了丰富的API,使得开发者可以轻松地执行FTP相关的任务。以下是一些关键功能: 1. FTP连接管理:创建和管理FTP连接...
标题中的“利用commons-net包实现ftp上传下载例子”是指通过Apache Commons Net库来实现FTP(File Transfer Protocol)的上传和下载功能。Apache Commons Net是Apache软件基金会开发的一个Java库,它提供了多种网络...
"Commons-Net FTP"是该库中的核心模块,主要包含以下关键类和接口: 1. `FTPClient`:这是与FTP服务器交互的主要类,可以用来登录服务器、切换工作目录、列出目录内容、上传/下载文件等。 2. `FTPFile`:表示FTP...
Java的`common-net`工具包提供了FTP客户端的实现,使得开发者能够方便地在Java应用中集成FTP文件传输功能。Apache Log4j是Java日志记录框架,它提供了灵活的日志记录控制,有助于调试和追踪FTP文件传输过程中的问题...
`Common-net`是Apache Commons项目的一部分,提供了各种网络相关的通用操作。这个库包含了很多实用工具类,如IP地址处理、FTP客户端、SMTP邮件发送、URL操作等。在自动化测试中,`Common-net`可以辅助进行网络环境的...
在实际使用中,需要确保正确添加了依赖的Apache Commons Net库,即`commons-net-x.x.jar`和`commons-net-ftp-x.x.jar`。在Maven或Gradle项目中,可以通过配置依赖管理来导入这些库。 总的来说,Apache Commons Net...
正如描述中提到的,`common-net.jar`是实现这一目标的关键依赖包。 Apache Commons Net库包含了`FTPClient`类,它是实现FTP客户端功能的核心。首先,我们需要在项目中引入`common-net.jar`,可以通过Maven或Gradle...
Apache Tomcat 集群是实现高可用性和负载均衡的一种方法,它通过将多个Tomcat实例组合在一起,确保在任何单个实例失败时,服务仍然能够持续运行。Apache HTTP Server (通常称为Apache) 与Tomcat的集成,特别是通过...
Apache的common-pool工具包提供了开发通用对象池的一些接口和实现类,其中最基本的两个接口是ObjectPool和PoolableObjectFactory。ObjectPool接口中有几个最基本的方法: 1. addObject() : 添加对象到池 2. ...
FastCGI(Fast Common Gateway Interface)是一种协议,用于将Web服务器(如Apache)与外部程序(通常为PHP、Python或Perl解释器)进行通信,以处理动态内容。相比传统的CGI,FastCGI更高效,因为它在处理多个请求时...
- Common Unix Printing System (CUPS) 的配置。 - 打印队列的管理。 - 多打印机环境的设置。 **4.5 构建内核** - **章节简介**:提供了构建Linux内核的方法。 - **核心知识点**: - 内核编译流程。 - 配置...
此外,Apache Commons 项目遵循良好的编程实践,代码结构清晰,注释详尽,是学习 Java 编程和设计模式的优秀实例。 在学习源码时,建议先了解每个模块的基本使用方法,然后逐步深入到具体类和方法的实现。分析源码...
可以使用Python的`ftplib`库来实现FTP客户端。 ##### 6.3 SMTP协议 SMTP(Simple Mail Transfer Protocol)用于发送电子邮件。Python提供了一个名为`smtplib`的库来简化SMTP邮件发送过程。 #### 七、总结 通过...