首页 Java_FTP文件上传下载

Java_FTP文件上传下载

举报
开通vip

Java_FTP文件上传下载用Java实现FTP批量大文件上传下载(一) 本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量、大文件的上传下载控件。文章在比较了一系列FTP客户库的基础上,就其中一个比较通用且功能较强的j-ftp类库,对一些比较常见的功能如进度条、断点续传、内外网的映射、在Applet中回调JavaScript函数等问题进行详细的阐述及代码实现,希望通过此文起到一个抛砖引玉的作用。 一、        引子 笔者在实施一个项目过程中出现了一种基于Web的...

Java_FTP文件上传下载
用Java实现FTP批量大文件上传下载(一) 本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量、大文件的上传下载控件。文章在比较了一系列FTP客户库的基础上,就其中一个比较通用且功能较强的j-ftp类库,对一些比较常见的功能如进度条、断点续传、内外网的映射、在Applet中回调JavaScript函数等问题进行详细的阐述及代码实现,希望通过此文起到一个抛砖引玉的作用。 一、        引子 笔者在实施一个项目过程中出现了一种基于Web的文件上传下载需求。在全省(或全国)各地的用户,需要将一些文件上传至某中心的文件服务器上。这些文件是用于一些大型的工程建设,可能涉及到上千万甚至上亿的建设工程。文件具有三个鲜明的特征:一是文件大,可能达到50M;二是文件数量多,有可能15个左右;三是数据安全性方面 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 数字签名及数据加密。 首先考虑到是基于HTTP的传输方式。但笔者通过比较很快发现满足上面的需求: 1:用HTTP 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 上传,似乎更适合web编程的方便性;上传小于1M文件速度要比用FTP协议上传文件略快。但对于批量及大文件的传输可能无能为力。当然,它也有它的优势,如不像FTP那样,必须在服务器端启动一个FTP服务。 2:用FTP协议上传文件大于1M的文件速度比HTTP快。文件越大,上传的速度就比HTTP上传的速度快数倍。而且用java编写程序;FTP比HTTP方便。 笔者曾经使用VB也写过ActiveX控件来进行批量文件的上传下载,其功能也很强大。只是由于没有对CAB文件或OCX进行专门的数字签名,因此需要进行客户端烦琐的设置,如设置安全站点、降低客户端的安全级别等等,因而放弃了些方案。 同时考虑到在需在客户端对文件进行数字签名及数据加密,决定采用Applet的方式实现。。文件上传之前,在客户端可以获取本地USBKEY密钥信息,完成对上传文件的加密和签名处理。虽然采用Applet要求在客户端安装JRE运行时环境,给客户端的管理及使用带来一度的不方便性,但是相对起如此大量的文件及文件的安全性,这也许已经算是比较小的代价了。 总结一下运行的环境为: FTP服务器端:Serv-U,专业的FTP服务器端程序,网上有现成的软件下载,当然读者也可能自己写一个服务器端的FTP文件接收程序来进行解释。如果没有特殊要求或功能的话,Serv-U应该可以满足我们一般上传下载的需求了; 客户端:Java applet,当年让Java大火了一把的号称与微软的ActiveX相提并论的技术当然,现在Java出了JavaFX,是不是Applet的替代品呢? 应用环境:Internet网,最终目的。 二、        Java FTP客户端库的选择 让我们设想这样一个情形--我们想写一个纯Java的从一个远程计算机上运行的FTP服务器上传下载文件的应用程序;我们还希望能够得到那些供下载的远程文件的基本文件信息,如文件名、数据或者文件大小等。 尽管从头开始写一个FTP协议处理程序是可能的,并且也许很有趣,但这项工作也是困难、漫长并且存在着潜在的危险。因为我们不愿意亲自花时间、精力、或者金钱去写这样的一个处理程序,所以我们转而采用那些已经存在的可重用的组件。并且很多的库存在于网上。 找一个优秀的适合我们需要的Java FTP 客户端库并不像看起来那么简单。相反这是一项非常痛苦复杂的工作。首先找到一个FTP客户端库需要一些时间,其次,在我们找到所有的存在的库后,我们该选哪一个呢?每个库都适合不同的需求。这些库在性能上是不等价的,并且它们的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 上有着根本上的差别。每个类库都各具特点并使用不同的术语来描述它们。因而,评价和比较FTP客户端库是一件困难的事情。 使用可重用组件是一种值得提倡的方法,但是在这种情况下,刚开始往往是令人气馁的。后来或许有点惭愧:在选择了一个好的FTP库后,其后的工作就非常简单了,按简单的规则来就行了。目前,已经有很多公开免费的ftp客户端类库,如simpleftp、J-ftp等,还有很多其他的ftpclient。如下 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 所示,表中未能全部列出,如读者有更好的客户端FTP类库,请进行进一步的补充。 FTP客户端类库名 备注 J-ftp J-ftp simpleftp HTTP://www.jibble.org/files/simpleftp.jar ftpclient com.enterprisedt.net.ftp.FTPClient FTPProtocol com.ibm.network.ftp.protocol.FTPProtocol FtpConnection  net.sf.jftp.net.FtpConnection FTPClient org.apache.commons.net.ftp.FTPClient FTPClient  jshop.jnet.FTPClient FtpClient  sun.net.ftp.FtpClient  FTP  com.cqs.ftp.FTP  Ftp cz.dhl.ftp.Ftp FTPClient org.globus.io.ftp.FTPClient 在本文中,笔者采用是J-ftp。这个是个开源的且功能十分强大的客户端FTP类库。笔者很喜欢,同时也向各位读者推荐一下。算了免费为它做一个广告。 三、        基本功能 1、 登陆 采用FTP进行文件传输,其实本质上还是采用Java.net.socket进行通信。以下代码只是类net.sf.jftp.net.FtpConnection其中一个login方法。当然在下面的代码,为了节省版面,以及将一些原理阐述清楚,笔者将一些没必要的代码去掉了,如日志等代码。完整的代码请参考J-ftp的源代码或是笔者所以的示例源代码,后面的代码示例也同理: public int login(String username, String password) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedBlock.gif" \* MERGEFORMAT     {         this.username = username;         this.password = password;         int status = LOGIN_OK;         jcon = new JConnection(host, port);         if(jcon.isThere()) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             in = jcon.getReader();             if(getLine(POSITIVE) == null)//FTP220_SERVICE_READY) == null) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 ok = false;                                 status = OFFLINE;             }                if(!getLine(loginAck).startsWith(POSITIVE))//FTP230_LOGGED_IN)) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                                if(success(POSITIVE))//FTP230_LOGGED_IN)) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                 {                                  }                 else INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                 {                     ok = false;                     status = WRONG_LOGIN_DATA;                 }             }         }         else INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             if(msg) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 Log.debug("FTP not available!");                 ok = false;                 status = GENERIC_FAILED;             }         }         if(ok) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             connected = true;             system();             binary();                          String[] advSettings = new String[6];             if(getOsType().indexOf("OS/2") >= 0) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 LIST_DEFAULT = "LIST";             }             if(LIST.equals("default")) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 //just get the first item (somehow it knows first is the                 //FTP list command)                 advSettings = LoadSet.loadSet(Settings.adv_settings);                 //*** IF FILE NOT FOUND, CREATE IT AND SET IT TO LIST_DEFAULT                 if(advSettings == null) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                 {                     LIST = LIST_DEFAULT;                     SaveSet s = new SaveSet(Settings.adv_settings, LIST);                 }                 else INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                 {                     LIST = advSettings[0];                     if(LIST == null) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                     {                         LIST = LIST_DEFAULT;                     }                 }             }             if(getOsType().indexOf("MVS") >= 0) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 LIST = "LIST";             }             //***             fireDirectoryUpdate(this);             fireConnectionInitialized(this);         }         else INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             fireConnectionFailed(this, new Integer(status).toString());         }         return status;     } 此登陆方法中,有一个JConnection类,此类负责建立socket套接字    ,同时,此类是一种单独的线程,这样的好处是为了配合界面的变化,而将网络的套接字连接等工作做为单独的线程来处理,有利于界面的友好性。下面是net.sf.jftp.net.JConnection类的run方法,当然,此线程的启动是在JConnection类的构造方法中启动的。     public void run() INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedBlock.gif" \* MERGEFORMAT     {         try INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             s = new Socket(host, port);             localPort = s.getLocalPort();             //if(time > 0) s.setSoTimeout(time);             out = new PrintStream(new BufferedOutputStream(s.getOutputStream(),                                                            Settings.bufferSize));             in = new BufferedReader(new InputStreamReader(s.getInputStream()),                                     Settings.bufferSize);             isOk = true;             // }         }         catch(Exception ex) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             ex.printStackTrace();             Log.out("WARNING: connection closed due to exception (" + host +                     ":" + port + ")");             isOk = false;             try INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 if((s != null) && !s.isClosed()) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                 {                     s.close();                 }                 if(out != null) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                 {                     out.close();                 }                 if(in != null) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                 {                     in.close();                 }             }             catch(Exception ex2) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(一)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 ex2.printStackTrace();                 Log.out("WARNING: got more errors trying to close socket and streams");             }         }         established = true;     }   此run方法中的socket这里说明一下,此类实现客户端套接字(也可以就叫“套接字”),套接字是两台机器之间的通信端点。套接字的实际工作由 SocketImpl 类的实例执行。应用程序通过更改创建套接字实现的套接字工厂可以配置它自身,以创建适合本地防火墙的套接字。具体的说明请参考JDK5 的API说明,最好是中文的。呵呵。 用Java实现FTP批量大文件上传下载(二)  上传下载 文件的上传可以分成多线程及单线程,在单线程情况下比较简单,而在多线程的情况下,要处理的事情要多点,同时也要小心很多。下面是net.sf.jftp.net.FtpConnection的上传handleUpload方法。已经考虑了单线程及多线程两种不同的类型。 public int handleUpload(String file, String realName) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedBlock.gif" \* MERGEFORMAT     {         if(Settings.getEnableMultiThreading() &&                (!Settings.getNoUploadMultiThreading())) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             Log.out("spawning new thread for this upload.");             FtpTransfer t;             if(realName != null) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 t = new FtpTransfer(host, port, getLocalPath(), getCachedPWD(),                                     file, username, password, Transfer.UPLOAD,                                     handler, listeners, realName, crlf);             }             else INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 t = new FtpTransfer(host, port, getLocalPath(), getCachedPWD(),                                     file, username, password, Transfer.UPLOAD,                                     handler, listeners, crlf);             }             lastTransfer = t;             return NEW_TRANSFER_SPAWNED;         }         else INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             if(Settings.getNoUploadMultiThreading()) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 Log.out("upload multithreading is disabled.");             }             else INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 Log.out("multithreading is completely disabled.");             }             return (realName == null) ? upload(file) : upload(file, realName);         } }   在多线程的情况下,有一个单独的类net.sf.jftp.net .FtpTransfer,当然,多线程情况下,此类肯定是一个单独的线程了。与JConnection相似,其线程的启动也是在构造方法中启动。而在它的run方法中,进行文件的读取及传输。 public void run() INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedBlock.gif" \* MERGEFORMAT     {         if(handler.getConnections().get(file) == null) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             handler.addConnection(file, this);         }         else if(!pause) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             Log.debug("Transfer already in progress: " + file);             work = false;             stat = 2;             return;         }         boolean hasPaused = false;         while(pause) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             try INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 runner.sleep(100);                 if(listeners != null) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                 {                     for(int i = 0; i < listeners.size(); i++) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                     {                         ((ConnectionListener) listeners.elementAt(i)).updateProgress(file,                                                                                      PAUSED,                                                                                      -1);                     }                 }                 if(!work) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                 {                     if(listeners != null) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                     {                         for(int i = 0; i < listeners.size(); i++) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                         {                             ((ConnectionListener) listeners.elementAt(i)).updateProgress(file,                                                                                          REMOVED,                                                                                          -1);                         }                     }                 }             }             catch(Exception ex) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {             }             hasPaused = true;         }         while((handler.getConnectionSize() >= Settings.getMaxConnections()) &&                   (handler.getConnectionSize() > 0) && work) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             try INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 stat = 4;                 runner.sleep(400);                 if(!hasPaused && (listeners != null)) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                 {                     for(int i = 0; i < listeners.size(); i++) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                     {                         ((ConnectionListener) listeners.elementAt(i)).updateProgress(file,                                                                                      QUEUED,                                                                                      -1);                     }                 }                 else INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                 {                     break;                 }             }             catch(Exception ex) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 ex.printStackTrace();             }         }         if(!work) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             if(listeners != null) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 for(int i = 0; i < listeners.size(); i++) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                 {                     ((ConnectionListener) listeners.elementAt(i)).updateProgress(file,                                                                                  REMOVED,                                                                                  -1);                 }             }             handler.removeConnection(file);             stat = 3;             return;         }         started = true;         try INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             runner.sleep(Settings.ftpTransferThreadPause);         }         catch(Exception ex) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {         }         con = new FtpConnection(host, port, remotePath, crlf);         con.setConnectionHandler(handler);         con.setConnectionListeners(listeners);         int status = con.login(user, pass);         if(status == FtpConnection.LOGIN_OK) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT         {             File f = new File(localPath);             con.setLocalPath(f.getAbsolutePath());             if(type.equals(UPLOAD)) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT             {                 if(newName != null) INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                 {                     transferStatus = con.upload(file, newName);                 }                 else INCLUDEPICTURE "用Java实现FTP批量大文件上传下载/用Java实现FTP批量大文件上传下载(二)%20-%20诗特林-sterning%20-%20BlogJava.files/ContractedSubBlock.gif" \* MERGEFORMAT                 {                     transferStatus = con.upload(file);                 }             }     
本文档为【Java_FTP文件上传下载】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_838088
暂无简介~
格式:doc
大小:1MB
软件:Word
页数:46
分类:互联网
上传时间:2011-12-09
浏览量:93