-
Java用FTPClient类用线程池下载多个文件到本地?15
使用org.apache.commons.net.ftp.FTPClient 类,说说我的实现思想,我要创建一个线程池,如果有10个线程,要去FTP的一个目录下载文件到本地,假如这个目录有50个文件,假如这10个线程去下载50个文件,线程A下载一个文件时,其余的线程绕过这个文件去下载另外的文件,当线程A下载完毕后,继续下载其他没有下载的文件,请问这样如何实现,保证线程安全(避免几个线程同时下载一个文件的情况)?最好能贴代码,多谢!提升下载的速度!
问题补充:avgguy 写道用一个List保存要下载的文件列表,另一个List保存已下载的文件列表。每个线程下载开始前都去前面那个List获取要下载的文件,下载完成后将文件保存到已下载的List中。
你可以参考下面的简化线程类
//下载线程类 public class DownloadThread extend Thread{ List<String> fileList; FtpClient ftp; public DownloadThread(List<String> fileList, FtpClient ftp){ this.fileList = fileList; this.ftp = ftp; } public void start(){ String dstFn = "d:\\file"; while(!fileList.isEmpty()){ String fn = null; synchronized(fileList){ fn = fileList.get(0); fileList.remove(0); } download(fn, dstFn, ftp); } } //下载文件 private void download(String filename, String dstFilename, FtpClient ftp){ //下载代码,还应该处理异常等 FileOutputStream fos = new FIle(dstFilename); ftp.downloadFile(filename, fos); fos.close(); } }
有点慢!2011年12月21日 21:02
2个答案 按时间排序 按投票排序
-
引用
avgguy 写道
用一个List保存要下载的文件列表,另一个List保存已下载的文件列表。每个线程下载开始前都去前面那个List获取要下载的文件,下载完成后将文件保存到已下载的List中。
你可以参考下面的简化线程类
Java代码 收藏代码
//下载线程类
public class DownloadThread extend Thread{
List<String> fileList;
FtpClient ftp;
public DownloadThread(List<String> fileList, FtpClient ftp){
this.fileList = fileList;
this.ftp = ftp;
}
public void start(){
String dstFn = "d:\\file";
while(!fileList.isEmpty()){
String fn = null;
synchronized(fileList){
fn = fileList.get(0);
fileList.remove(0);
}
download(fn, dstFn, ftp);
}
}
//下载文件
private void download(String filename, String dstFilename, FtpClient ftp){
//下载代码,还应该处理异常等
FileOutputStream fos = new FIle(dstFilename);
ftp.downloadFile(filename, fos);
fos.close();
}
}
有点慢!
你也可以尝试在 download 方法内创建 FtpClient。不过,那样应该也不能提高速度。如果FTP服务器限制了只能单线程下载的话,就只能每次下载一个文件了。
2011年12月26日 09:36
-
用一个List保存要下载的文件列表,另一个List保存已下载的文件列表。每个线程下载开始前都去前面那个List获取要下载的文件,下载完成后将文件保存到已下载的List中。
你可以参考下面的简化线程类
//下载线程类 public class DownloadThread extend Thread{ List<String> fileList; FtpClient ftp; public DownloadThread(List<String> fileList, FtpClient ftp){ this.fileList = fileList; this.ftp = ftp; } public void start(){ String dstFn = "d:\\file"; while(!fileList.isEmpty()){ String fn = null; synchronized(fileList){ fn = fileList.get(0); fileList.remove(0); } download(fn, dstFn, ftp); } } //下载文件 private void download(String filename, String dstFilename, FtpClient ftp){ //下载代码,还应该处理异常等 FileOutputStream fos = new FIle(dstFilename); ftp.downloadFile(filename, fos); fos.close(); } }
2011年12月22日 15:29
相关推荐
FTPClient 是一个基于 Java 的 FTP 客户端库,提供了丰富的 FTP 操作 API,例如上传、下载、删除文件等。然而,在高并发场景下,频繁创建和销毁 FTPClient 对象可能会对服务器造成很大的压力。 为了解决这个问题,...
创建一个线程池来处理每个文件的下载任务,每个任务通过FTP客户端下载一个文件。`Future`接口可以用来查询任务状态,获取结果或取消任务。并发处理可以显著提高下载效率,但需要合理控制线程数量以避免资源耗尽。 4...
此外,为了提高性能和可靠性,可以考虑使用线程池来并行处理多个文件任务。记住,始终确保对网络资源进行适当的管理和关闭,以防止资源泄露。在开发过程中,你可以利用`ftpDemo`这样的测试文件进行调试和验证代码的...
FTP文件管理管理模块在Java中的实现涉及到多个关键知识点,涵盖了网络通信、文件处理以及多线程编程。以下是对这些知识点的详细阐述: 1. FTP(File Transfer Protocol)协议:FTP是一种用于在网络上进行文件传输的...
Java提供了强大的多线程编程能力,通过`java.lang.Thread`类或`java.util.concurrent`包中的`ExecutorService`和`Future`接口,可以方便地创建和管理多个下载线程。每个线程负责下载文件的一部分,这样可以充分利用...
此外,为了提高性能,可以考虑使用线程池并发上传多个文件,或者使用连接池管理FTP连接。 总的来说,Java FTP上传IIS的实现涉及到Java网络编程、FTP协议、可能的第三方库使用,以及良好的异常管理和资源管理实践。...
8. **多线程与并发**:为了提高下载速度,可以考虑使用多线程并发下载,将大文件分成多个部分同时下载。Java的`ExecutorService`和`Future`接口可以帮助管理和协调这些并发任务。 9. **状态持久化**:为了在程序...
例如,我们可以创建一个方法,将多个文件或目录打包成ZIP文件,或者使用`ZipFile`类来遍历ZIP文件内容并提取所需文件。这个工具类在文件归档、数据备份或者网络传输时非常实用。 2. **Java线程封装**: 在多线程...
Java FTP多线程批量断点续传是一种在Java编程中实现高效、稳定文件传输的方法,尤其适用于大文件的上传和下载。在这个过程中,我们利用FTP(File Transfer Protocol)协议,结合多线程技术和断点续传功能,可以显著...
此外,为了提高性能和可靠性,可以考虑使用线程池来并发执行多个FTP任务。 总的来说,Java通过`FtpClient`实现FTP功能,为开发者提供了一种高效、灵活的文件传输解决方案,适用于各种需要与FTP服务器交互的应用场景...
综上所述,"java编写ftp定时上传下载" 这一主题涵盖了Java编程、网络文件传输、定时任务调度、配置文件读取等多个方面,通过合理地组合这些技术,可以实现自动化的FTP文件管理和同步,大大提高了工作效率。...
在多线程环境下,每个线程可以处理一个或多个文件的上传或下载。 6. 异常处理:由于网络环境的不可靠性,FTP操作可能会抛出异常。因此,需要对这些异常进行适当的捕获和处理,如SocketTimeoutException、...
Java中的`RandomAccessFile`类提供了一种方式,可以定位到文件中的任意位置,这对于实现断点续传非常有用。 4. **多线程传输**:为了提高传输效率,可以使用多个线程同时传输文件的不同部分。这需要将文件分割成多...
综上所述,这个"JAVA文件传输(LW+源代码).rar"包为学习和实践Java文件传输提供了丰富的资源,涵盖了从基础的I/O流到高级的网络通信和并发处理等多个方面。通过深入研究源代码和论文,开发者不仅可以掌握文件传输的...
首先,多线程下载是一种利用网络资源的方式,它将一个大文件分成多个部分,通过创建多个并行的网络连接,同时下载这些部分,从而加快下载速度。这种方式可以充分利用网络带宽,尤其在下载大文件时,可以显著减少下载...
除了Socket编程,Java还可以通过FTPClient和HttpClient等库实现FTP和HTTP协议的文件上传和下载,这些协议是互联网上广泛使用的文件传输协议。 九、源代码分析 源代码部分可能包含了一个完整的Java文件传输系统实现...
在“JAVA经典软件代码”这个资源包中,包含了多个基于Java编程语言的示例应用,这些应用涵盖了网络通信、文件传输、多媒体处理等多个领域。以下是这些应用的主要知识点和功能介绍: 1. **二人聊天室(chap03)** -...
- 可以使用线程池来处理多个并发连接,每个连接由一个单独的线程处理。 - 自定义FTP服务器需要实现文件操作逻辑,如读取、写入、删除文件,以及目录管理。 2. **Apache Commons Net库** - Apache Commons Net库...
为了实现多线程,我们需要创建多个线程或线程池,每个线程负责处理文件的一部分。 以下是一个简化的Python示例,展示了如何使用`ftplib`库实现多线程FTP下载: ```python import threading import ftplib def ...
8. **并发处理**:高质量的FTP服务器应能处理多个并发连接,Java FTPServer可能会使用线程池来管理并发连接,保证服务器的稳定性和性能。 9. **配置与扩展**:Java FTPServer的配置文件一般包含服务器的各项参数,...