- 浏览: 294139 次
- 性别:
- 来自: 上海
最新评论
-
sonichy:
可以用来设计显示隐藏文件
java中File.listFiles(FileFilter) FileFilter的使用 -
fbbobo:
ftp.voidcmd('TYPE I')
python 开发的通过FTP上传下载文件类 -
LinApex:
文件内容一次性读入,性能消耗非常大
java中对文件计算MD5 -
zlb824:
问楼主一个问题,先定位于264行,如下:OutputStrea ...
org.apache.commons.net.ftp包开发FTP客户端,实现断点续传,中文支持 -
6214832:
楼主,在Linux下搭建的服务器上上传下载没有问题,但是用xl ...
org.apache.commons.net.ftp包开发FTP客户端,实现断点续传,中文支持
主要使用apache中的net包来实现。网址http://commons.apache.org/net/。具体包的下载和API文档请看官网。
断点上传就是在上传的过程中设置传输的起始位置。并设置二进制传输。
package apache.net.test; 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; public class ContinueFTP { private FTPClient ftpClient = new FTPClient(); public ContinueFTP(){ //设置将过程中使用到的命令输出到控制台 this.ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out))); } /** * 连接到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{ ftpClient.connect(hostname, port); if(FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){ if(ftpClient.login(username, password)){ return true; } } disconnect(); return false; } /** * 从FTP服务器上下载文件 * @param remote 远程文件路径 * @param local 本地文件路径 * @return 是否成功 * @throws IOException */ public boolean download(String remote,String local) throws IOException{ ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); boolean result; File f = new File(local); FTPFile[] files = ftpClient.listFiles(remote); if(files.length != 1){ System.out.println("远程文件不唯一"); return false; } long lRemoteSize = files[0].getSize(); if(f.exists()){ OutputStream out = new FileOutputStream(f,true); System.out.println("本地文件大小为:"+f.length()); if(f.length() >= lRemoteSize){ System.out.println("本地文件大小大于远程文件大小,下载中止"); return false; } ftpClient.setRestartOffset(f.length()); result = ftpClient.retrieveFile(remote, out); out.close(); }else { OutputStream out = new FileOutputStream(f); result = ftpClient.retrieveFile(remote, out); out.close(); } return result; } /** * 上传文件到FTP服务器,支持断点续传 * @param local 本地文件名称,绝对路径 * @param remote 远程文件路径,使用/home/directory1/subdirectory/file.ext 按照Linux上的路径指定方式,支持多级目录嵌套,支持递归创建不存在的目录结构 * @return 上传结果 * @throws IOException */ public UploadStatus upload(String local,String remote) throws IOException{ //设置PassiveMode传输 ftpClient.enterLocalPassiveMode(); //设置以二进制流的方式传输 ftpClient.setFileType(FTP.BINARY_FILE_TYPE); UploadStatus result; //对远程目录的处理 String remoteFileName = remote; if(remote.contains("/")){ remoteFileName = remote.substring(remote.lastIndexOf("/")+1); String directory = remote.substring(0,remote.lastIndexOf("/")+1); if(!directory.equalsIgnoreCase("/")&&!ftpClient.changeWorkingDirectory(directory)){ //如果远程目录不存在,则递归创建远程服务器目录 int start=0; int end = 0; if(directory.startsWith("/")){ start = 1; }else{ start = 0; } end = directory.indexOf("/",start); while(true){ String subDirectory = remote.substring(start,end); if(!ftpClient.changeWorkingDirectory(subDirectory)){ if(ftpClient.makeDirectory(subDirectory)){ ftpClient.changeWorkingDirectory(subDirectory); }else { System.out.println("创建目录失败"); return UploadStatus.Create_Directory_Fail; } } start = end + 1; end = directory.indexOf("/",start); //检查所有目录是否创建完毕 if(end <= start){ break; } } } } //检查远程是否存在文件 FTPFile[] files = ftpClient.listFiles(remoteFileName); if(files.length == 1){ long remoteSize = files[0].getSize(); File f = new File(local); long localSize = f.length(); if(remoteSize==localSize){ return UploadStatus.File_Exits; }else if(remoteSize > localSize){ return UploadStatus.Remote_Bigger_Local; } //尝试移动文件内读取指针,实现断点续传 InputStream is = new FileInputStream(f); if(is.skip(remoteSize)==remoteSize){ ftpClient.setRestartOffset(remoteSize); if(ftpClient.storeFile(remote, is)){ return UploadStatus.Upload_From_Break_Success; } } //如果断点续传没有成功,则删除服务器上文件,重新上传 if(!ftpClient.deleteFile(remoteFileName)){ return UploadStatus.Delete_Remote_Faild; } is = new FileInputStream(f); if(ftpClient.storeFile(remote, is)){ result = UploadStatus.Upload_New_File_Success; }else{ result = UploadStatus.Upload_New_File_Failed; } is.close(); }else { InputStream is = new FileInputStream(local); if(ftpClient.storeFile(remoteFileName, is)){ result = UploadStatus.Upload_New_File_Success; }else{ result = UploadStatus.Upload_New_File_Failed; } is.close(); } return result; } /** * 断开与远程服务器的连接 * @throws IOException */ public void disconnect() throws IOException{ if(ftpClient.isConnected()){ ftpClient.disconnect(); } } public static void main(String[] args) { ContinueFTP myFtp = new ContinueFTP(); try { myFtp.connect("192.168.21.171", 21, "test", "test"); System.out.println(myFtp.upload("E:\\VP6.flv", "/MIS/video/VP6.flv")); myFtp.disconnect(); } catch (IOException e) { System.out.println("连接FTP出错:"+e.getMessage()); } } }
其中部分代码,如服务器连接,断开,打印命令到控制台等来自于互联网
评论
2 楼
zhouzaibao
2009-06-20
是一个返回状态的枚举
1 楼
vivian831015
2009-06-18
UploadStatus这个类是用来返回操作成功或失败信息的吗?
发表评论
-
jconsole连接远程resin应用
2010-06-02 15:16 3542最近做一个web服务 ... -
log4j中配置将日志打印到不同的文件
2009-12-29 15:53 5727原文出处: http://hi.baidu.com/sihi ... -
java中GMT时间转换为long类型
2009-06-09 11:33 5899计算机世界当中的时间这里我也没有搞明白 ,如果希望搞明 ... -
java程序命令行启动方法
2009-05-06 10:07 7883刚开始学习java的朋友一定很想知道除了在IDE中点击 ... -
java开发FTP客户端列出指定目录下面所有文件
2009-04-07 17:09 14111利用commons2.0(http://commons ... -
commons2.0FTP组件开发上传时间过长程序假死解决方案
2009-03-24 15:50 4790在我前一篇blog中http://zhouzaibao ... -
使用apache commons 2.0 net组件开发ftp上传大文件使程序假死
2009-03-21 10:21 2548最近使用apache上面的commons 2.0开发 ... -
获得字符串表示的布尔表达式的值
2009-03-20 11:56 1465在实际的开发中有些时候需要计算字符串表示的布尔表达式的 ... -
java在一行固定输出,比如在一行打印进度
2009-03-13 18:36 9806在java中要实现在控制台一行中定点输出,因为我想实现 ... -
java读取控制台输入
2009-03-13 17:41 3362java中获得控制台输入不是很方便,只从1.5版本后才 ... -
java中File.listFiles(FileFilter) FileFilter的使用
2009-03-11 18:28 25762在我们调用java库中的File.listFiles( ... -
org.apache.commons.net.ftp包开发FTP客户端,实现断点续传,中文支持
2009-03-09 17:58 15900利用org.apache.commons.net.ftp包实现 ... -
jdom结合xpath读取xml数据内容
2009-03-09 16:43 2179上次说到如果XML文件的层次比较多,直接通过 ... -
java环境变量及ant环境变量设置
2009-03-05 15:14 4280在eclipse中运行java程序有些时候确实不爽,比较喜欢的 ... -
java中对文件计算MD5
2009-03-05 14:42 7355import java.io.File; import jav ... -
重定向printStackTree的输出到字符串
2009-02-24 18:16 2059在实际的开发为了捕获异常,经常需要使用try{}catch{} ... -
log4j使用指南
2009-01-09 17:12 1120Log4J的配置文件(Configurat ... -
java中处理文件相关
2008-11-28 14:48 8291.使用缓冲区打开文件读。 BufferedReade ... -
关闭使用httpclient中过多日志
2008-11-22 13:17 11024在使用httpclient建立http连接的过程中,默 ... -
个人总结Java中需要注意的问题(不断补充中)
2008-11-20 21:44 1029其实这些东西估计大家都知道,将我遇到的问题整理一下。 1.字符 ...
相关推荐
以上就是使用Java和Apache Commons Net库实现FTP断点续传的基本步骤。在实际应用中,你可能还需要处理异常,优化文件读写性能,以及考虑其他因素,如重试机制、错误处理等。了解这些知识点将使你能够高效地实现在...
总之,Java中的FTP断点续传功能是通过与FTP服务器的交互,结合特定的FTP命令和状态管理来实现的。这种功能对于任何需要进行大量文件传输的系统都非常重要,因为它提高了效率并减少了网络资源的浪费。
在学习Java FTP断点续传的过程中,还可以参考`jsymxx225.zip`中提供的源码,该压缩包可能包含了一个完整的FTP断点续传实现示例。此外,`下载及使用说明.txt`文件可能包含了解压缩和运行代码的详细步骤,而`更多Java...
java实现FTP多线程断点续传,上传下载! - java学习与交流 - j2ee学习网 - j2ee学习网 (2012年5月21日) 用 Java 实现断点续传 (HTTP) (2012年5月21日) Java写的支持断点续传的FTP--crybaby的博客 (2012年5月21日) ...
Java FTP(File Transfer Protocol)是Java编程中用于与FTP服务器交互的一种技术,它允许程序员编写应用程序来上传、下载文件,并实现断点续传功能。在本文中,我们将深入探讨Java FTP上传、下载以及断点续传的核心...
在这个Java FTP项目中,我们关注的是如何实现FTP的断点续传功能,以及如何利用Java进行多线程FTP上传。 断点续传是FTP的一个重要特性,它允许在文件传输中断后从上次停止的地方继续,而不是重新开始整个文件的传输...
在Java中实现FTP批量大文件上传下载需要使用FTP客户端库,例如J-FTP。首先,需要建立FTP连接,接着使用FTP客户端库上传或下载文件。在上传过程中,可以使用断点续传功能,以便在上传过程中出现问题时,可以从断点...
Java 实现 FTP 断点续传是一项常见的...总的来说,实现Java中的FTP断点续传涉及理解FTP协议,使用适当的库,以及处理可能出现的网络和文件系统问题。在开发过程中,注意错误处理和性能优化,确保功能的稳定性和效率。
Java FTP技术是Java编程中用于实现文件传输协议(FTP)的一种方法,主要用于在客户端和服务器之间上传、下载文件。在Java中,我们可以使用`java.net`包中的`Socket`类来实现基本的FTP功能,但更常见的是使用Apache ...
Java实现FTP断点续传是一项在开发中常遇到的需求,主要应用于大文件传输或网络不稳定时确保文件完整传输。FTP(File Transfer Protocol)是互联网上用于文件传输的标准协议,而断点续传则是FTP的一个重要特性,允许...
在Java中,我们可以使用多种库来实现FTP功能。 2. **Java FTP库**:在描述中提到了`edtftpj.jar`,这是一个Java FTP客户端库,提供了一种简单的方式来处理FTP连接和文件传输。另外,`commons-net-1.4.1.jar`是...
Apache FTP库为Java开发者提供了丰富的功能,包括主被动模式的切换、断点续传以及错误处理等,大大简化了FTP(File Transfer Protocol)客户端的实现。 首先,我们来详细了解主被动模式。在FTP协议中,有两种工作...
在Java中实现FTP断点上传是一项常见的任务,特别是在文件传输需求中。...以下是对标题和描述中所述...通过这种方式,我们可以实现Java中的FTP断点上传功能,即使在网络不稳定或意外中断的情况下,也能有效地继续上传文件。
在Java编程环境中,FTP(File Transfer Protocol)下载功能的实现主要涉及到网络编程和文件操作,尤其是当需要支持断点下载时,需要对FTP协议有深入的理解。断点下载是指在网络中断或用户暂停后能从上次中断的位置...
### Java实现FTP多线程断点续传:深入解析与技术要点 在现代软件开发中,数据传输是一项基本且关键的任务,特别是在处理...通过理解并应用上述关键技术点,开发者可以在自己的项目中实现高效、稳定的FTP断点续传功能。
java实现ftp断点续传,上传文件到FTP服务器,支持断点续传,同时支持LINUX主机,代码里面包括了比较多的java网络操作类,比如连接FTP的常规类、递归创建远程服务器目录 上传文件到服务器,新上传和断点续传操作,远程...
Java 实现FTP自动上传文件是一项常见的任务,尤其在自动化运维和数据传输中。这个程序能够遍历指定磁盘的所有文件,包括子目录,并通过FTP协议将它们上传到远程服务器。以下是一些关于如何使用Java实现FTP自动上传的...
Java实现FTP上传下载是Java开发中常见的任务,主要用于在服务器和客户端之间传输文件。FTP(File Transfer Protocol)是一种用于在Internet上进行文件传输的标准协议。本篇将详细讲解如何使用Java来实现FTP的上传和...