在用Java实现FTP上传文件功能时,特别是上传大文件的时候,可以需要这样的功能:程序在上传的过程中意外终止了,文件传了一大半,想从断掉了地方继续传;或者想做类似迅雷下载类似的功能,文件太大,今天传一半,睡一觉去先,明天继续传。
Java上传FTP文件,用的比较多的工具是apache的commons-net。如果想用commons-net实现FTP上传的断点续传还是有点麻烦。
除了commons-net之外,还有很多非常优秀的FTP工具,这里使用edtftpj这个工具来实现断点续传。
这里下载免费版,相对收费的版本少一些功能,但是足够使用了。
下载完成,解压后,在lib文件夹下,可以看到edtftpj.jar文件。放到项目中去。
下面是FTP断点续传上传文件的代码:
import java.io.File; import java.io.IOException; import com.enterprisedt.net.ftp.FTPException; import com.enterprisedt.net.ftp.FTPTransferType; import com.enterprisedt.net.ftp.FileTransferClient; import com.enterprisedt.net.ftp.WriteMode; public class FtpTool { /** * edtptpj的上传工具 */ private FileTransferClient ftp; /** * FTP IP */ private String ip; /** * FTP端口号 */ private int port; /** * FTP用户名 */ private String username; /** * FTP密码 */ private String password; /** * * 构造方法,初始化FTP IP、FTP端口、FTP用户名、FTP密码 * * @param ip * FTP IP * @param port * FTP端口 * @param username * FTP用户名 * @param password * FTP密码 */ public FtpTool(String ip, int port, String username, String password) { this.ip = ip; this.port = port; this.username = username; this.password = password; } /** * * 连接FTP * * @throws FTPException * FTPException * @throws IOException * IOException * @author XXG */ public void connect() throws FTPException, IOException { ftp = new FileTransferClient(); ftp.setRemoteHost(ip); ftp.setRemotePort(port); ftp.setUserName(username); ftp.setPassword(password); //设置二进制方式上传 ftp.setContentType(FTPTransferType.BINARY); ftp.connect(); } /** * * 上传本地文件到FTP服务器上,文件名与原文件名相同 * * @param localFile * 本地文件路径 * @param remoteFilePath * 上传到FTP服务器所在目录(该目录必须已经存在) * @throws IOException * IOException * @throws FTPException * FTPException * @author XXG * */ public void resumeUpload(String localFile, String remoteFilePath) throws FTPException, IOException { File local = new File(localFile); //FTP文件完整路径 String remoteFileFullPath = remoteFilePath + local.getName(); //上传:WriteMode.RESUME表示断点续传 ftp.uploadFile(localFile, remoteFileFullPath, WriteMode.RESUME); } /** * * 关闭FTP连接 * * @throws IOException * IOException * @throws FTPException * FTPException * @author XXG */ public void close() throws FTPException, IOException { ftp.disconnect(); } }
下面是main方法测试断点续传功能(测试的时候可以在上传的中途关闭程序,再开始上传,看是否在续传):
public static void main(String[] args) { FtpTool ftpTool = new FtpTool("192.168.7.49", 21, "editor", "tvm_editor"); try { ftpTool.connect(); try { System.out.println("开始上传文件..."); ftpTool.resumeUpload("E:\\软件\\eclipse-jee-indigo-SR2-win32.zip", "wucao/aa/"); System.out.println("完成上传文件。"); } catch (Exception e) { e.printStackTrace(); } finally { ftpTool.close(); } } catch (Exception e) { e.printStackTrace(); } }
在上面的代码中,ftp.uploadFile(localFile,remoteFileFullPath, WriteMode.RESUME) 这句代码中的第三个参数WriteMode.RESUME即表示断点续传。
除了WriteMode.RESUME方式上传,还有其他两种方式:
WriteMode.OVERWRITE:覆盖上传,就是上次如果没传完,这次删掉上次的重新传。
WriteMode.APPEND:续写,就是如果FTP服务器上存在同名的文件,就接着它后面续加。
注意续写和断点续传区分:比如有个100M的文件上传,上次传了80M,那么用RESUME方式的话,传完剩下的20M就完成了,但对于APPEND,它会接在80M后面重新传,最后成功的时候FTP上的文件大小是180M。
最后要注意的是:并不是所有FTP服务器都支持断点续传,有断点续传的服务器也可以关闭断点续传的功能,不支持断点续传的服务器使用RESUME会抛出异常。所以,在使用FTP断点续传之前,首先要确认一下FTP服务器本身是否支持断点续传。
作者:叉叉哥 转载请注明出处:http://blog.csdn.net/xiao__gui/article/details/8259925
相关推荐
Markdown学习笔记
热塑性弹性体,全球前21强生产商排名及市场份额
配合eclipse svn插件subclipse-4.3.4版本的javahl,将其中的features和plugins目录解压到与subclipse-4.3.4插件同一目录下即可。在eclipse 4.31版本上验证有效。
一个基于epoll的多线程 linux c http web服务器.zip
本Bash脚本用于自动化管理Java JAR应用的启动、停止及监控。首先检查JAR进程是否在运行,如在运行则安全终止。随后,使用预设的Java参数启动JAR文件,并将输出和错误日志重定向至日志文件。启动后,脚本持续监控JAR进程状态,确保其在预设时间内成功启动。本脚本提供了灵活的配置和错误处理机制,为Java应用的运维管理带来了便捷与可靠性。
嗨淘V12刷任务点赞系统源码+手动派单版本.rar嗨淘V12刷任务点赞系统源码+手动派单版本.rar
本Bash脚本用于自动化管理Java JAR应用的启动、停止及监控。首先检查JAR进程是否在运行,如在运行则安全终止。随后,使用预设的Java参数启动JAR文件,并将输出和错误日志重定向至日志文件。启动后,脚本持续监控JAR进程状态,确保其在预设时间内成功启动。本脚本提供了灵活的配置和错误处理机制,为Java应用的运维管理带来了便捷与可靠性。
秒懂傅里叶变换matlab程序实现过程
某大型集团管控制度流程 qy.pptx
基于STM32F101单片机设计Bluetooth Sentinel 主板硬件(原理图+PCB)工程文件,仅供学习设计参考。
电力公司财务信息化的方向及ERP系统财务模块流程(PPT 223页).ppt
2024-2030全球与中国太阳能电池测试与分选装置市场现状及未来发展趋势
基于matlab实现夜间车牌识别程序(1).rar
后端开发是一个涉及广泛技术和工具的领域,这些资源对于构建健壮、可扩展和高效的Web应用程序至关重要。以下是对后端开发资源的简要介绍: 首先,掌握一门或多门编程语言是后端开发的基础。Java、Python和Node.js是其中最受欢迎的几种。Java以其跨平台性和丰富的库而著名,Python则因其简洁的语法和广泛的应用领域而备受欢迎。Node.js则通过其基于JavaScript的单线程异步I/O模型,为Web开发提供了高性能的解决方案。 其次,数据库技术是后端开发中不可或缺的一部分。关系型数据库(如MySQL、PostgreSQL)和非关系型数据库(如MongoDB、Redis)各有其特点和应用场景。关系型数据库适合存储结构化数据,而非关系型数据库则更适合处理大量非结构化数据。 此外,Web开发框架也是后端开发的重要资源。例如,Express是一个基于Node.js的Web应用开发框架,它提供了丰富的API和中间件支持,使得开发人员能够快速地构建Web应用程序。Django则是一个用Python编写的Web应用框架,它采用了MVC的软件设计模式,使得代码结构更加清晰和易于维护。
华为云和阿里云都找不到的古老jar包
MTD HDT 3008C 3016C 用户手册 Meteodata / Hydrodata系列3000C型号MTD / HDT 3008C / 3016C气象站使用说明书
sony 索尼IMX334摄像头模组电路板AD版硬件PCB图(6层板),PCB大小为38*38mm,可以做为你的学习设计参考。 主要器件封装如下: Component Count : 19 Component Name ----------------------------------------------- HOLE_3 HSOT23 ID-BOARD LENS_SOCKET-GS5 LGA128-1R0-1312-MV-BVT SC0402 SC0603 SC0805B SED90-F-A SIP-2P-20 SOT23 SOT23-6B SOT223-6A SR0402 SR0603 SR0805 STAMP-1X3-80 STC3528 STP40
ThinkPHP导航网站个性网址导航.rarThinkPHP导航网站个性网址导航.rar
库存管理课件qy.pptx
,运行于linux上,底层主要基于epoll,登录验证,注册,游戏框架基本全部做好,您只需要添加游戏逻辑就可以了