java实现的FTP上传下载客户端

org.apache.commons.net.ftp.*中的FTPClient类实现的FTP上传下载功能:

需导入Apache的commos-net的jar包,若导入的是1.4版本的包,则FTPFile[] fileList = ftpClient.listFiles()的执行过程中可能会报错,此时更换导入2.0版本的jar包,问题即可解决。

代码如下:

[c-sharp]  view plain  copy
  1. package com.java.ftp;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileNotFoundException;  
  6. import java.io.FileOutputStream;  
  7. import java.io.IOException;  
  8. import java.io.OutputStream;  
  9.   
  10. import org.apache.commons.net.ftp.*;  
  11.   
  12. public class FtpUtil {  
  13.   
  14.     private FTPClient ftpClient = new FTPClient();  
  15.   
  16.     /** 
  17.      * 连接到FTP服务器 
  18.      *  
  19.      * @param host 
  20.      *            FTP地址 
  21.      * @param port 
  22.      *            端口号 
  23.      * @param username 
  24.      *            用户名 
  25.      * @param password 
  26.      *            密码 
  27.      */  
  28.     public boolean ftpConnect(String host, int port, String username,  
  29.             String password) {  
  30.         try {  
  31.             ftpClient.connect(host, port);  
  32.             ftpClient.setControlEncoding("GBK");  
  33.             int reply = ftpClient.getReplyCode();  
  34.             if (FTPReply.isPositiveCompletion(reply)) {  
  35.                 if (ftpClient.login(username, password)) {  
  36.                     System.out.println("Successful login!");  
  37.                     return true;  
  38.                 } else {  
  39.                     System.out.println("fail to login!");  
  40.                 }  
  41.             }  
  42.         } catch (Exception e) {  
  43.             System.out.println("Failure connection!");  
  44.             e.printStackTrace();  
  45.         }  
  46.         return false;  
  47.     }  
  48.     //从本地上传单个文件,localName:本地文件路径包含文件名,ftpFile:所要放于ftp的文件夹,newName:重命名  
  49.     public void ftpUpload(String localName, String ftpFile, String newName) {  
  50.         File srcFile = new File(localName);  
  51.         FileInputStream fis = null;  
  52.         try {  
  53.             fis = new FileInputStream(srcFile);  
  54.             //改变工作目录到所需要的路径下  
  55.             ftpClient.changeWorkingDirectory(ftpFile);    
  56.             ftpClient.setBufferSize(1024);  
  57.             ftpClient.setControlEncoding("GBK");  
  58.             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
  59.             ftpClient.storeFile(newName, fis);  
  60.         } catch (Exception e) {  
  61.             System.out.println("Failed to upload!");  
  62.             e.printStackTrace();  
  63.         } finally {  
  64.             try {  
  65.                 fis.close();  
  66.                 ftpDisConnect();  
  67.             } catch (IOException e) {  
  68.                 e.printStackTrace();  
  69.             }  
  70.         }  
  71.     }  
  72.     //从本地上传一个文件夹,localPath:本地文件夹,ftpPath:上传的资源所要存放的文件夹  
  73.     public void ftpUpload2(String localPath, String ftpPath) {  
  74.         File uploadFile = new File(localPath);  
  75.         File[] fileList = uploadFile.listFiles();  
  76.         FileInputStream fis = null;  
  77.         if (fileList == null) {  
  78.             return;  
  79.         }  
  80.         for (int i = 0; i < fileList.length; i++) {  
  81.             try {  
  82.                 fis = new FileInputStream(fileList[i]);  
  83.                 String ftpFileName = fileList[i].getName();  
  84.                 ftpClient.changeWorkingDirectory(ftpPath);  
  85.                 ftpClient.setBufferSize(1024);  
  86.                 ftpClient.setControlEncoding("GBK");  
  87.                 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
  88.                 ftpClient.storeFile(ftpFileName, fis);  
  89.   
  90.             } catch (Exception e) {  
  91.                 e.printStackTrace();  
  92.             }  
  93.         }  
  94.         try {  
  95.             fis.close();  
  96.         } catch (IOException e) {  
  97.             e.printStackTrace();  
  98.         }  
  99.         ftpDisConnect();  
  100.   
  101.     }  
  102.     //从FTP下载单个文件  
  103.     public void ftpDownload(String ftpFile, String localName) {  
  104.         File outfile = new File(localName + "/" + ftpFile);  
  105.         OutputStream fos = null;  
  106.         try {  
  107.             fos = new FileOutputStream(outfile);  
  108.             ftpClient.setBufferSize(1024);  
  109.             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
  110.             ftpClient.retrieveFile(ftpFile, fos);  
  111.         } catch (Exception e) {  
  112.             System.out.println("Failed to upload!");  
  113.             e.printStackTrace();  
  114.         } finally {  
  115.             try {  
  116.                 fos.close();  
  117.                 ftpClient.disconnect();  
  118.             } catch (IOException e) {  
  119.                 // TODO Auto-generated catch block  
  120.                 e.printStackTrace();  
  121.             }  
  122.             ftpDisConnect();  
  123.         }  
  124.     }  
  125.     //从FTP下载一个文件夹  
  126.     public void ftpDownload2(String ftpPath, String localPath) {  
  127.         OutputStream fos = null;  
  128.         File localFile = null;  
  129.         try {  
  130.             ftpClient.changeWorkingDirectory(ftpPath);  
  131.             FTPFile[] fileList = ftpClient.listFiles();  
  132.             for (int i = 0; i < fileList.length; i++) {  
  133.                 String localname = fileList[i].getName();  
  134.                 localFile = new File(localPath + "/" + localname);  
  135.                 fos = new FileOutputStream(localFile);  
  136.                 ftpClient.setBufferSize(1024);  
  137.                 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
  138.             }  
  139.         } catch (Exception e) {  
  140.             e.printStackTrace();  
  141.         }  
  142.         try {  
  143.             fos.close();  
  144.         } catch (IOException e) {  
  145.             e.printStackTrace();  
  146.         }  
  147.         ftpDisConnect();  
  148.   
  149.     }  
  150.   
  151.     public void ftpDisConnect() {  
  152.         try {  
  153.             if (ftpClient.isConnected()) {  
  154.                 ftpClient.disconnect();  
  155.             }  
  156.         } catch (IOException e) {  
  157.             // TODO Auto-generated catch block  
  158.             e.printStackTrace();  
  159.         }  
  160.     }  
  161.     //测试  
  162.     public static void main(String[] args) {  
  163.         FtpUtil ftp = new FtpUtil();  
  164.         ftp.ftpConnect("172.20.65.30", 21, "z""zzz");  
  165.         //下载单个文件  
  166.         ftp.ftpUpload("D://1.jpg""/s""6.jpg");  
  167.         //下载文件夹  
  168.         ftp.ftpUpload2("D://桌面""/s");  
  169.         //上传单个文件  
  170.         ftp.ftpDownload("/s/2.jpg""e:/");  
  171.         //上传文件夹  
  172.         ftp.ftpDownload2("/s","e://s");  
  173.     }  
  174. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值