Java FTP(Apache)文件上传、下载

来源:互联网 发布:淘宝提前收款不能用了 编辑:程序博客网 时间:2024/05/22 00:28
ftpjar包下载:http://download.csdn.net/detail/lgq_0714/4216449
[java] view plaincopyprint?
  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.FileOutputStream;  
  4. import java.io.OutputStream;  
  5. import java.text.SimpleDateFormat;  
  6. import java.util.Date;  
  7.   
  8. import org.apache.commons.net.ftp.FTPClient;  
  9. import org.apache.commons.net.ftp.FTPClientConfig;  
  10. import org.apache.commons.net.ftp.FTPFile;  
  11. import org.apache.commons.net.ftp.FTPReply;  
  12.   
  13. import sun.net.TelnetOutputStream;  
  14. import sun.net.ftp.FtpClient;  
  15. /** 
  16.  * @author Administrator 
  17.  * @version 1.0 
  18.  * @date 2012-3-12 
  19.  * @class_displayName FTPUtils 
  20.  */  
  21.   
  22. public class FTPUtils {  
  23.  /** 
  24.   * Description: 向FTP服务器上传文件  通过sun的FtpClient实现上传(为了解决中文文件乱码问题) 
  25.   * @param url FTP服务器IP地址 
  26.   * @param port  FTP服务器端口 
  27.   * @param username FTP登录账号 
  28.   * @param password FTP登录密码 
  29.   * @param path  FTP服务器保存目录 
  30.   * @param originalFileName 原始文件名 
  31.   * @param ftpFileName 上传到FTP服务器上的文件名 
  32.   * @return 成功返回true,否则返回false 
  33.   */  
  34.  public static boolean uploadFile(String server, int port, String user,  
  35.    String password, String path, String originalFileName,  
  36.    String ftpFileName) {  
  37.   boolean success = false;  
  38.   FtpClient ftpClient;  
  39.   
  40.   try {  
  41.    ftpClient = new FtpClient();  
  42.    ftpClient.openServer(server,port);  
  43.    ftpClient.login(user, password);  
  44.    System.out.println("Login .......");  
  45.   
  46.    // path是ftp服务下主目录的子目录   
  47.    if (path.length() != 0)  
  48.     ftpClient.cd(path);  
  49.      
  50.    // 用2进制上传,防止上传中文文件乱码       
  51.    ftpClient.binary();  
  52.   
  53.    TelnetOutputStream os = null;  
  54.    FileInputStream is = null;  
  55.   
  56.    os = ftpClient.put(ftpFileName);  
  57.    File file_in = new File(originalFileName);  
  58.    if (file_in.length() == 0) {  
  59.     throw new Exception("上传文件为空!");  
  60.    }  
  61.    is = new FileInputStream(file_in);  
  62.    byte[] bytes = new byte[1024];  
  63.    int c;  
  64.    while ((c = is.read(bytes)) != -1) {  
  65.     os.write(bytes, 0, c);  
  66.    }  
  67.    is.close();  
  68.    os.close();  
  69.    success = true;  
  70.   } catch (Exception e) {  
  71.    e.printStackTrace();  
  72.   }  
  73.   
  74.   return success;  
  75.  }  
  76.   
  77.  /** 
  78.   * Description: 从FTP服务器下载文件   通过Apache的FTPClient实现文件的下载 
  79.   *  
  80.   * @param ip FTP服务器的ip地址 
  81.   * @param port FTP服务器端口,默认为:21 
  82.   * @param username FTP登录账号 
  83.   * @param password FTP登录密码 
  84.   * @param remotePath FTP服务器上的相对路径 
  85.   * @param fileName 要下载的文件名 
  86.   * @param localPath 下载后保存到本地的路径 
  87.   * @return 
  88.   */  
  89.  public static boolean downloadFile(String ip, int port, String username,  
  90.    String password, String remotePath, String fileName,  
  91.    String localPath) {  
  92.   boolean success = false;  
  93.   FTPClient ftp = new FTPClient();  
  94.   try {  
  95.    int reply;  
  96.    ftp.connect(ip, port);  
  97.    // 下面三行代码必须要,而且不能改变编码格式,否则不能正确下载中文文件  
  98.    ftp.setControlEncoding("GBK");  
  99.    FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);  
  100.    conf.setServerLanguageCode("zh");  
  101.   
  102.    // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器  
  103.    ftp.login(username, password);// 登录  
  104.    reply = ftp.getReplyCode();  
  105.    if (!FTPReply.isPositiveCompletion(reply)) {  
  106.     ftp.disconnect();  
  107.     return success;  
  108.    }  
  109.   
  110.    ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录  
  111.    FTPFile[] fs = ftp.listFiles();  
  112.   
  113.    for (int i = 0; i < fs.length; i++) {  
  114.     FTPFile ff = fs[i];  
  115.     if (!ff.getName().equals(".") && !ff.getName().equals("..")) {  
  116.   
  117.      File localFile = new File(localPath + File.separator  
  118.        + ff.getName());  
  119.        
  120.      if(!localFile.exists())//如果文件已存在则不重复下载  
  121.      {  
  122.       OutputStream is = new FileOutputStream(localFile);  
  123.   
  124.       // 注意此处retrieveFile的第一个参数由GBK转为ISO-8859-1编码。否则下载后的文件内容为空。  
  125.       // 原因可能是由于aix系统默认的编码为ISO-8859-1  
  126.       ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),  
  127.         "ISO-8859-1"), is);  
  128.       is.close();  
  129.      }  
  130.     }  
  131.    }  
  132.   
  133.    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  134.    System.out.println("------------------end:"+dateFormat.format(new Date())+"-----------------------------------");  
  135.      
  136.    ftp.logout();  
  137.    success = true;  
  138.   } catch (Exception e) {  
  139.    e.printStackTrace();  
  140.   } finally {  
  141.    if (ftp.isConnected()) {  
  142.     try {  
  143.      ftp.disconnect();  
  144.     } catch (Exception ioe) {  
  145.      ioe.printStackTrace();  
  146.     }  
  147.    }  
  148.   }  
  149.   return success;  
  150.  }  
  151.   
  152.  public static void main(String[] args) {  
  153.   try {  
  154.    downloadFile("192.168.103.215"21"servu""111111",  
  155.      "D:/ftpserv""测试.xls""C:/primeton2012/jakarta-tomcat-5.0.28/upload/FEEDBACK_INFO");  
  156.      
  157.    // server:FTP服务器的IP地址   
  158.    String server = "192.168.103.215";  
  159.    // user:登录FTP服务器的用户名   
  160.    String user = "servu";  
  161.    // password:登录FTP服务器的用户名的口令  
  162.    String password = "111111";  
  163.    // path:FTP服务器上的路径   
  164.    String path = "D:/ftpserv";  
  165.    // 要上传本地文件路径   
  166.    String originalFileName = "F://Web//Web//src//测试.xls";  
  167.    // 上传服务器上文件名   
  168.    String ftpFileName = "测试2012-3-12-植树节-.xls";  
  169.      
  170.    uploadFile(server, 21, user, password, path, originalFileName, ftpFileName);  
  171.   } catch (Exception e) {  
  172.    e.printStackTrace();  
  173.   }  
  174.   
  175.  }  
  176. }  
原创粉丝点击