文件FTP上传支持断点续传demo(一)

2014-11-24 08:56:37 · 作者: · 浏览: 5

package cn.eason.util.common;


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.io.PrintWriter;


import org.apache.commons.net.PrintCommandListener;
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;


/**************************************************************
* 文件名称: ContinueFTP.java
* 功能描述: ftp文件上传功能,依赖commons-net-3.1.jar实现
* 创建日期: 2012-5-21
* 创建地址: 西安
* 作者: Eric.Hao
**************************************************************/
public class ContinueFTP {

private FTPClient ftpClient = new FTPClient();

public ContinueFTP(){

//设置将过程中使用到的命令输出到控制台
this.ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
}


/**
* java编程中用于连接到FTP服务器
* @param hostname 主机名
* @param port 端口
* @param username 用户名
* @param password 密码
* @return 是否连接成功
* @throws IOException
*/
public boolean connect(String hostname,int port,String username,String password)
throws IOException {
//连接到FTP服务器
ftpClient.connect(hostname, port);
//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
if(FTPReply.isPositiveCompletion(ftpClient.getReplyCode()))
{

if(ftpClient.login(username, password))
{
return true;
}
}

disconnect();
return false;


}


/**
* 从FTP服务器上下载文件,支持断点续传功能
* @param remote 远程文件路径
* @param local 本地文件路径
* @param mode tb传输方式:PassiveMode方式,ActiveMode方式
* @return 是否成功
* @throws IOException
*/
public DownloadStatus download(String remote,String local,String mode) throws IOException{


//设置ftp传输方式
if(mode.equalsIgnoreCase("P")){
//PassiveMode传输
ftpClient.enterLocalPassiveMode();
}
else {
//ActiveMode传输
ftpClient.enterLocalActiveMode();
}

//设置以二进制流的方式传输
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

//下载状态
DownloadStatus result;

//本地文件列表
File f = new File(local);

//检查远程文件是否存在
FTPFile[] files = ftpClient.listFiles(new String(remote.getBytes("GBK"),"iso-8859-1"));


if(files.length != 1){
System.out.println("远程文件不存在");
return Down