`

edtftpj让Java上传FTP文件支持断点续传

    博客分类:
  • java
阅读更多

在用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

  • 大小: 88.9 KB
分享到:
评论

相关推荐

    java实现ftp上传jar包

    4. **使用edtFTPj/Pro**:`edtFTPj/Pro`是一个强大的Java FTP库,提供了更高级的功能,如SSL/TLS支持,断点续传,文件同步等。它的API使用方式与Apache Commons Net类似,但可能具有更丰富的错误处理和更友好的接口...

    java上传文件至ftp

    总之,使用Java和`edtftpj`库上传文件到FTP服务器是一种常见的做法,这个库提供了全面的功能和良好的性能,适合在各种项目中使用。通过理解这些基础知识,你可以根据具体需求来实现更复杂的FTP操作。

    com.enterprisedt.net.ftp.FTPClient所需的JAR(edtftpj.jar)

    - **断点续传**:利用`FTPClient.setRestartOffset(offset)`和`FTPClient.setFileType(BINARY_FILE_TYPE)`支持从上次中断的位置继续上传或下载。 - **关闭连接**:完成操作后,记得调用`FTPClient.disconnect()`关闭...

    JAVAFTP开发第三方类库

    EDTFTPj是一个功能丰富的开源Java FTP/FTPS/SFTP客户端库,支持主动和被动模式、断点续传、多线程上传下载、文件重命名、文件权限设置等多种特性。其版本2.0.4提供了稳定性和性能的改进,以及对FTP和更安全的FTP ...

    java关于FTP的包

    这个库名为EDTFTPj,是一个功能强大的、完全Java编写的FTP和SFTP客户端库,支持主动和被动模式,SSL/TLS加密,以及断点续传等功能。 1. **FTP基本概念**: - **主动模式**:服务器发起数据连接到客户端的随机端口...

    edtftpj.zip

    此外,EDTFTPj还支持断点续传、被动模式、主动模式以及其他高级FTP功能。 使用EDTFTPj库的第一步是将其添加到你的项目依赖中。如果你的项目使用Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>...

    一个很好的java编写的ftp客户端

    Java FTP 客户端是一种基于Java编程语言实现的文件传输协议...对于初学者来说,可以从简单的命令行FTP客户端开始,逐步增加UI和错误处理功能,随着经验的积累,可以考虑实现更复杂的功能,如断点续传、多线程传输等。

    edtftpj-2.1.0

    "edtftpj"就是这样一个库,它提供了丰富的功能,如连接管理、文件上传、下载、目录浏览、断点续传等,极大地简化了Java程序员进行FTP操作的复杂性。 在描述中提到的“java操作FTP支持FTP上传下载”,意味着此库主要...

    edtftpj-1.5.4.jar

    除了基本的FTP操作,edtftpj库还提供了高级特性,如文件传输的进度监控、断点续传、自动重试策略以及错误处理机制,这些对于复杂的文件传输任务尤其有用。 总的来说,edtftpj-1.5.4.jar是Java开发者实现FTP功能的...

    FTP 文件的上传下载

    FTP 文件的上传下载是网络通信中常见的操作,尤其在IT行业中,FTP(File Transfer...在实际应用中,还需要注意错误处理和异常管理,确保文件传输的可靠性,并可能需要实现断点续传、文件权限控制等功能以满足各种需求。

    edtftpj-pro

    例如,它支持断点续传,即使在传输过程中出现网络中断,也能从上次中断的地方继续,节省了时间和带宽资源。同时,它还具备文件和目录的同步功能,帮助用户保持本地和远程文件系统的同步。 在API层面,edtftpj-pro...

    commons-net-1.4.1.jar、jakarta-oro-2.0.8.jar、edtftpj.jar

    与Apache Commons Net不同,EDTFTPj专注于提供更高级别的FTP功能,如断点续传、文件大小检查、多线程传输等。在Java应用程序中,开发者可以利用这个库实现复杂的FTP操作,包括文件的上传、下载、移动、重命名以及...

Global site tag (gtag.js) - Google Analytics