A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李长波 中级黑马   /  2012-11-10 22:38  /  3127 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

FTP的多线程下载,之前一直使用的是FTP4j觉得蛮好用的,但是在处理多线程问题时,FTP4j就显得很弱了,因此改用Apache 的commons.Net 2.2来实现。
后来发现commons.net2.2在多线程方面实现起来的确比ftp4j简单。


public static void main(String[] args) {
  try {
   FTPClient ftpClient = new FTPClient();
   ftpClient.setControlEncoding("gbk");
   ftpClient.connect("192.168.1.3");
   ftpClient.login("h3c", "human520");
   
   //获得文件大小
   FTPFile[] ftpFile = ftpClient.listFiles("ftp4j-中文测试.zip");
   System.out.println(ftpFile[0].getSize());


   File outfile = new File("C:/Users/Administrator/Desktop/test.zip");
   FileOutputStream  out = new FileOutputStream(outfile);  
   ftpClient.setRestartOffset(10240); //从这里开始
   InputStream in = ftpClient.retrieveFileStream("ftp4j-中文测试.zip");
   byte[] bytes = new byte[1024];
   int c;
   int s = 0;
   while((c = in.read(bytes))!= -1){  
                 out.write(bytes,0,c);  
                 s+=c;
                 if(s==10240){
               break; //到这里结束
                 }
             }  
   System.out.println(s);
//   ftpClient.retrieveFile("ftp4j-中文测试.zip", oStream);    //一次性下载完
         out.close();  
        in.close();
        
        if (ftpClient != null) {
         ftpClient.logout();
         ftpClient.disconnect();
        }
  } catch (SocketException e) {
   // TODO Auto-generated catch block
   System.out.println("SocketException");
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   System.out.println("IOException");
   e.printStackTrace();
  }
}

1 个回复

倒序浏览
哦哦,还行吧,学习了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马