`

FtpClient和FTPClient下载的使用

    博客分类:
  • Java
阅读更多
最近接收一个遗留项目,用的是flex和java,后台用的是mybatis和spring。在测试时发现下载有问题,结果花了一两天时间才将问题解决,下面将解决过程中碰到的问题和解决的思路贴出来:
因为项目做出来有段时间了,当初用的是sun.net.ftp.FtpClient这个类,这个类本身就存在问题,而且java api文档中无法查询。并且是jdk1.6的版本,导致放在jre1.7上时保存,后来改成jre1.6问题才解决,但是仍然无法下载,一直报异常“Source not found for $$FastClassByCGLIB$$7782d62a.invoke(int, Object, Object[]) line: not available”。让人很纠结,硬是没有找到原因所在,网上有的说是sql语句错了,有的说是jar包的问题,有的说是反射或cglib的问题等等,但是一一测试仍然没有解决,因为之前有人说这个功能是好的,所以就没有打算换方法,后来实在不行,网上也有人建议用apache的org.apache.commons.net.ftp.FTPClient类,就换成了FTPClient。结果居然好用了:
代码如下:
public static boolean downFile(List<String> directoryList,
			String targetPath) {  
			
		    boolean success = false;  
		    for (String directoryString : directoryList) {
		    	String fileName = directoryString.substring(directoryString
						.lastIndexOf("/") + 1);
		    	String remotePath = directoryString.substring(1, directoryString
						.lastIndexOf("/"));
		    	 FTPClient ftp = new FTPClient();  
				    try {  
				        int reply;  
				        ftp.connect(ftpIP);  
				        ftp.login(username, password);//登录  
				        reply = ftp.getReplyCode();  
				        if (!FTPReply.isPositiveCompletion(reply)) {  
				            ftp.disconnect();  
				            return success;  
				        }  
				        ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录  
				        FTPFile[] fs = ftp.listFiles();  
				        for(FTPFile ff:fs){  
				            if(ff.getName().equals(fileName)){  
				                  
				            	File localFile = new File(targetPath+"/");
				            	if (!localFile.exists()) {
				            		localFile.mkdirs();
				            	}
				            	OutputStream is = new FileOutputStream(localFile+"/"+ff.getName());  
				                ftp.retrieveFile(ff.getName(), is);  
				                is.close();  
				            }  
				        }  
				          
				        ftp.logout();  
				        success = true;  
				    } catch (IOException e) {  
				        e.printStackTrace();  
				    } finally {  
				        if (ftp.isConnected()) {  
				            try {  
				                ftp.disconnect();  
				            } catch (IOException ioe) {  
				            }  
				        }  
				    }  
		    }
		    return success;  
		}
分享到:
评论
3 楼 南京玄武 2013-12-05  
liugang_ok 写道
南京玄武 写道
你确定这一段不影响效率?
FTPFile[] fs = ftp.listFiles();    
                        for(FTPFile ff:fs){    
                            if(ff.getName().equals(fileName)){    
                                    
                                File localFile = new File(targetPath+"/");  
                                if (!localFile.exists()) {  
                                    localFile.mkdirs();  
                                }  
                                OutputStream is = new FileOutputStream(localFile+"/"+ff.getName());    
                                ftp.retrieveFile(ff.getName(), is);    
                                is.close();    
                            }    
                        }

看你文件处理的频率和大小了,如果你有更好的方法也可以分享下?

我也没有……只能怪FTP判断文件是否存在的方法还不够完善了。。。
2 楼 liugang_ok 2013-11-19  
南京玄武 写道
你确定这一段不影响效率?
FTPFile[] fs = ftp.listFiles();    
                        for(FTPFile ff:fs){    
                            if(ff.getName().equals(fileName)){    
                                    
                                File localFile = new File(targetPath+"/");  
                                if (!localFile.exists()) {  
                                    localFile.mkdirs();  
                                }  
                                OutputStream is = new FileOutputStream(localFile+"/"+ff.getName());    
                                ftp.retrieveFile(ff.getName(), is);    
                                is.close();    
                            }    
                        }

看你文件处理的频率和大小了,如果你有更好的方法也可以分享下?
1 楼 南京玄武 2013-11-19  
你确定这一段不影响效率?
FTPFile[] fs = ftp.listFiles();    
                        for(FTPFile ff:fs){    
                            if(ff.getName().equals(fileName)){    
                                    
                                File localFile = new File(targetPath+"/");  
                                if (!localFile.exists()) {  
                                    localFile.mkdirs();  
                                }  
                                OutputStream is = new FileOutputStream(localFile+"/"+ff.getName());    
                                ftp.retrieveFile(ff.getName(), is);    
                                is.close();    
                            }    
                        }

相关推荐

    使用FTPClient实现文件的上传下载

    这篇博客“使用FTPClient实现文件的上传下载”显然关注的是如何利用编程接口FTPClient来执行FTP操作,如上传和下载文件。FTPClient是Apache Commons Net库的一部分,它为Java开发者提供了方便的API来实现FTP功能。 ...

    JAVA中使用FTPClient上传下载.doc

    在Java程序中,使用FTPClient可以方便地实现文件的上传和下载。 2. **FTP文件上传**: - 首先,通过`FTPClient.connect()`方法建立与FTP服务器的连接。连接时可以指定主机名(URL)和端口号。默认FTP端口是21,如果...

    ftpclient 文件上传、下载、删除

    FTPClient是Java中实现FTP功能的一个库,它提供了丰富的API,使得开发者能够方便地与FTP服务器进行交互,包括上传、下载和删除文件。在这个项目中,我们将会深入探讨如何使用FTPClient来完成这些操作。 首先,要...

    JAVA中使用FTPClient上传下载

    通过使用Java中的FTPClient库,开发人员可以轻松地在应用程序中集成FTP功能,实现文件的远程上传和下载。本文详细介绍了如何使用FTPClient进行这些操作,包括连接、登录、上传文件和断开连接的步骤。这为开发需要与...

    Delphi XE3使用ICS的FTPClient从FTP服务器下载文件

    Delphi XE3使用ICS的FTPClient从FTP服务器下载文件,本人用来实现客户端软件自动升级功能,提供从FTP下载文件的源码供大家参考。之前用的IdFTP连接服务器经常出现10054错误,参考网上的意见使用ICS的FTPClient解决了...

    java利用FTPClient实现上传下载文件.doc

    Java 中使用 FTPClient 实现上传下载文件是 Java 程序中经常需要和 FTP 打交道的重要内容。FTPClient 是 Jakarta Commons 中的一个工具类,位于 Commons Net 包中。FTPClient 提供了上传、下载、删除、创建目录等...

    ftpclient

    4. **文件上传与下载**:这是FTP的主要用途,FTPClient提供了上传本地文件到服务器,以及从服务器下载文件到本地的功能。 5. **数据传输模式**:FTP有两种数据传输模式,主动(PORT)模式和被动(PASV)模式。...

    使用commons.net FTP 和sun.net.ftp.FtpClient 多种方式上传下载(包括批量)删除功能(一)

    在本文中,我们将深入探讨如何使用Apache Commons Net库和Java内置的`sun.net.ftp.FtpClient`来实现FTP(文件传输协议)的功能,包括上传、下载、批量操作以及删除文件。这两个库提供了丰富的API,使得在Java应用...

    用org.apache.commons.net.ftp.FTPClient包实现简单文件下载

    下面是一个简单的示例代码,演示了如何使用FTPClient下载文件: ```java import org.apache.commons.net.ftp.*; public class FTPDownloadExample { public static void main(String[] args) { FTPClient ...

    System.Net.FtpClient.dll

    C#的FTP操作类库,支持FTP文件的上传,下载等等,封装好的可直接引用FtpClient; 如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用。 那就是System...

    ftpclient所需jar包

    4. 使用`FTPClient`的`retrieveFile`或`storeFile`方法进行文件上传或下载。 5. 在完成操作后,记得断开连接并释放资源。 `jakarta-oro-2.0.8.zip`同样需要解压并将jar文件加入类路径。在需要使用正则表达式的地方...

    使用FTPClient实现ftp文件上传

    在本文中,我们将深入探讨如何使用FTPClient来实现FTP文件上传,特别是处理中文文件名的上传问题。 FTP是一种广泛使用的互联网协议,允许用户在两台计算机之间传输文件。在Java中,我们可以利用Apache Commons Net...

    Spring Boot整合FTPClient线程池的实现示例

    Spring Boot 整合 FTPClient 线程池的实现示例 在本文中,我们将探讨如何在 Spring Boot 项目中整合 ...通过使用线程池,我们可以减少频繁创建和销毁 FTPClient 对象带来的性能消耗,提高系统的性能和稳定性。

    System.Net.FtpClient

    System.Net.FtpClient是一个用于C#编程中的FTP客户端库,其主要功能是提供方便、强大的FTP文件上传和下载能力。这个库编译后生成的System.Net.FtpClient.dll文件,为开发者提供了与FTP服务器交互的接口,极大地简化...

    FTPClient的jar包

    FTPClient的jar包 FTPClient ftpClient = new FTPClient(); ftpClient.connect("ftp.foo.com"); ftpClient.login("user01", "pass1234"); ftpClient.download("C:\\Temp\\&quo; t;, "README.txt"); // ...

    java FTPClient 文件上传下载文件

    对于Java开发者来说,利用Java的FTPClient进行文件的上传和下载是常见的需求之一。本篇文章将围绕如何使用Java中的`FTPClient`库来实现文件的上传与下载操作展开详细介绍。 #### 二、Java FTPClient 库介绍 `...

    FTPClient (apache)上传下载

    FTPClient (apache) 上传下载示例代码

    java ftp 下载 源程序 FTPClient

    下面将详细阐述Java FTP下载的基本原理、FTPClient库的使用方法以及如何实现FTP文件下载。 FTP是一种标准的网络协议,用于在客户端和服务器之间进行文件传输。在Java中,我们可以使用`java.net.Socket`和`java.io`...

    FTPClient开发工具类及使用示例

    通过`FTPClient.docx`文档,你可以找到更详细的FTPClient使用示例和代码片段,帮助理解如何在实际项目中应用这些功能。结合文档和上述讲解,你应该能够熟练地使用FTPClient进行FTP操作。在开发过程中,务必注意安全...

    详解JAVA中使用FTPClient工具类上传下载

    JAVA 中使用 FTPClient 工具类上传下载 JAVA 中使用 FTPClient 工具类上传下载是 JAVA 开发者经常需要的功能。FTPClient 是 Jakarta Commons Net 组件库中的一个工具类,提供了与 FTP 服务器的交互操作,包括上传...

Global site tag (gtag.js) - Google Analytics