`
refar
  • 浏览: 13690 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

用apache commons.net做FTP断点继传

阅读更多

package com.bettersoft.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.io.StringWriter;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

/**
 * FTP上传文件,支持断点续传
 * @author wanglh
 *
 */

public class AppendFtp extends FTPClient {

	/**
	 * 错误日志
	 * @param ae ae
	 */
	public void logException(Exception ae) {
		StringWriter sw = new StringWriter();
		PrintWriter pw = new PrintWriter(sw);
		ae.printStackTrace(pw);
	}
	
	public boolean deleteFile(String pathname) {
		boolean succ = false;
		try {
			succ = ftp.deleteFile(pathname);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return succ;
	}

	public FTPFile[] listFiles(String remote) throws IOException {
		if(remote != null && !"".equals(remote.trim())) {
			ftp.changeWorkingDirectory(remote); // 进入ftp目录
		}
		return ftp.listFiles();
	}
	
	
	/**
	 * 上传文件
	 * @param remote,远程路径
	 * @param local 本地全路径
	 * @return 是否成功
	 * @throws IOException IOException
	 */
	public boolean upload(String remote, String local)
			throws IOException {
		String temp[] = local.replaceAll("\\\\","/").split("/");//取文件名
		String fileName = "";
		if(temp.length > 1){
		    fileName = temp[temp.length - 1];
		}
		ftp.enterLocalPassiveMode();
		ftp.setFileType(FTPClient.BINARY_FILE_TYPE); // 2进制文件时,防止文件损坏
		boolean result;
		if(remote != null && !"".equals(remote.trim())) {
			ftp.changeWorkingDirectory(remote); // 进入ftp目录
		}
		boolean isExists = false;
		long fileSize = 123;
		FTPFile[] files = ftp.listFiles();
		for (int i = 0; i < files.length; i++) {
			FTPFile file = files[i];
			if (fileName.equals(file.getName())) {
				isExists = true;
				fileSize = file.getSize();
				break;
			}
		}
		if (isExists) {
			// 文件存在时, 使用断点上传方式
			File fLocal = new File(local);
			OutputStream os = ftp.appendFileStream(fileName);
			RandomAccessFile randomAccessFileLocal = new RandomAccessFile(
					fLocal, "r");
			randomAccessFileLocal.seek(fileSize);
			int len = 0;
			byte[] bt = new byte[1024];
			while ((len = randomAccessFileLocal.read(bt)) > 0) {
				os.write(bt, 0, len);
			}
			randomAccessFileLocal.close();
			os.close();
			result = true;
			ftp.completePendingCommand();
		} else {
			// 不存在时, 直接上传
			File f = new File(local);
			FileInputStream in = new FileInputStream(f);
			result = ftp.storeFile(fileName, in);
			in.close();
		}
		return result;
	}

	/**
	 * 建立FTP连接
	 * @param hostname FTP主机名
	 * @param port 端口
	 * @param username 用户名
	 * @param password 密码
	 * @return 是否连接成功
	 * @throws IOException IOException
	 */
	public boolean connect(String hostname, int port, String username,
			String password) throws IOException {
		ftp = new FTPClient();
		ftp.connect(hostname, port);
		ftp.login(username, password);
		if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
			disconnect();
			return false;
		}
		return true;
	}

	/**
	 * 关闭FTP连接
	 */
	public void disconnect() throws IOException {
		if (ftp.isConnected()) {
			ftp.disconnect();
		}
	}

	public FTPClient ftp;

	public static void main(String[] args) {
		try {
			AppendFtp ftpClient = new AppendFtp();
			ftpClient.connect("127.0.0.1", 21, "refar", "refar123");
			ftpClient.deleteFile("/sss/abc.txt");
			ftpClient.disconnect();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
 网上拷贝的代码,但网上的断点续传有问题,没有ftp.completePendingCommand();
分享到:
评论

相关推荐

    java_apache_ftp断点续传(资料及实例)

    在这个资料包中,你将找到使用Apache Commons Net进行FTP断点续传的相关资料和实例,以及可能包含MyEclipse 9.0的开发环境配置和FileZilla服务器的设置指南。 Apache Commons Net库提供了FTPClient类,它是Java实现...

    xuchuanftp_java_FTP断点续传_

    1. **连接服务器**:首先,需要使用Java的`java.net.Socket`类或者FTP库如Apache Commons Net建立与FTP服务器的连接,并登录到指定的账号。 2. **被动模式设置**:FTP有两种工作模式,主动和被动。在Java中,通常...

    java实现ftp断点续传Java实用源码整理learns

    总之,Java实现FTP断点续传涉及到网络编程和文件操作,需要理解FTP协议以及如何使用如Apache Commons Net这样的库。通过实践和学习提供的源码,开发者可以更好地掌握这项技术,从而提高文件传输的效率和可靠性。

    FTP断点续传

    import org.apache.commons.net.ftp.FTPClient; public class FtpClientExample { public static void main(String[] args) { FTPClient client = new FTPClient(); try { // 连接到FTP服务器 client.connect...

    android实现ftp断点续传下载类,完成后自动通知调用程序

    在Android平台上实现FTP断点续传下载功能,可以极大地提高用户下载大文件的效率和体验。断点续传允许应用程序在文件下载中断后从上次停止的地方继续,而不是重新开始整个下载过程。以下是对这一主题的详细阐述: 1....

    ftp.rar_FTP 断点续传_Java FTP上传_ftp 断点_ftp断点续传Java_java ftp

    1. **FTPClient库**:Java中通常使用Apache Commons Net库中的`FTPClient`类来处理FTP连接和操作。这个库提供了丰富的API,可以用来执行各种FTP命令,包括登录、上传、下载、断点续传等。 2. **被动模式(Passive ...

    java ftp 多线程 断点续传等知识

    在Java中,我们可以使用`java.net`包中的`Socket`类来实现基本的FTP功能,但更常见的是使用Apache Commons Net库,它提供了更丰富的FTP功能,包括多线程和断点续传。 FTP服务器是运行FTP服务的计算机,它存储着可供...

    FTP断点续传源码

    在Java中,可以使用`java.net.Socket`和`java.io`类实现FTP功能,但更常见的是使用Apache的Commons Net库,它提供了一个方便的FTPClient类。实现断点续传的关键在于使用`FTPClient.setRestartOffset()`方法设置起始...

    Android ftp断点续传Demo

    - **Apache Commons Net库**:Android应用通常使用Apache Commons Net库来实现FTP客户端功能,它提供了FTPClient类,可以方便地执行登录、上传、下载、断点续传等操作。 - **FTP传输模式**:主动模式和被动模式的...

    java ftp 上传 下载 断点续传

    Java FTP(File Transfer Protocol)是Java编程中用于与FTP服务器交互的一种技术,它允许程序员编写应用程序来上传、下载文件,并实现断点续传功能。在本文中,我们将深入探讨Java FTP上传、下载以及断点续传的核心...

    java ftp断点上传和下载

    以上就是使用Java和Apache Commons Net库实现FTP断点续传的基本步骤。在实际应用中,你可能还需要处理异常,优化文件读写性能,以及考虑其他因素,如重试机制、错误处理等。了解这些知识点将使你能够高效地实现在...

    java实现FTP断点续传

    Java 实现 FTP 断点续传是一项常见的...总的来说,实现Java中的FTP断点续传涉及理解FTP协议,使用适当的库,以及处理可能出现的网络和文件系统问题。在开发过程中,注意错误处理和性能优化,确保功能的稳定性和效率。

    java ftp断点续传资料

    Java FTP 断点续传是网络编程中一个重要的技术,主要应用于大文件传输,它可以提高文件上传或下载的效率,并且在传输中断后能够继续从...通过对这些内容的深入理解和实践,你将能更熟练地使用Java进行FTP断点续传编程。

    java FTP多线程 批量 断点续传

    Java FTP多线程批量断点续传是一种在Java编程中实现高效、稳定文件传输的方法,尤其适用于大文件的上传和下载。在这个过程中,我们利用FTP(File Transfer Protocol)协议,结合多线程技术和断点续传功能,可以显著...

    apache commons-net-3.5

    1. **FTP协议支持**:Apache Commons Net提供了全面的FTP客户端实现,涵盖了FTP协议的各种功能,如连接、登录、目录浏览、文件传输(PUT和GET)、断点续传、被动模式等。这使得开发人员无需深入了解FTP协议的细节,...

    java实现ftp断点续传

    以下是实现FTP断点续传的一个简要步骤: 1. 创建`FTPClient`实例并连接到FTP服务器。 2. 使用`FTPClient.login()`登录FTP服务器,提供用户名和密码。 3. 设置FTP工作模式,通常是被动模式,`FTPClient....

    commons-net-3.0.1.jar ftp4j

    Ftp4j提供了一个完整的FTP客户端实现,包括基本的文件操作和更高级的功能,如断点续传、多线程下载、文件列表解析等。其API简洁且灵活,允许开发者根据需求自定义各种行为。Ftp4j还支持FTPS(FTP over TLS/SSL)和...

    java实现FTP多线程断点续传

    ### Java实现FTP多线程断点续传:深入解析与技术要点 在现代软件开发中,数据传输是一项基本且关键的任务,特别是在处理...通过理解并应用上述关键技术点,开发者可以在自己的项目中实现高效、稳定的FTP断点续传功能。

Global site tag (gtag.js) - Google Analytics