首页 > 代码库 > java实现ftp文件的上传与下载

java实现ftp文件的上传与下载

最近在做ftp文件的上传与下载,基于此,整理了一下资料。本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的。。。

1.首先引用3个包

技术分享

 

2.然后是相关类的代码

 1 /** 2  * ftp链接常量 3  * 4  */ 5 public class Ftp { 6  7     private String ipAddr;//ip地址 8      9     private Integer port;//端口号10     11     private String userName;//用户名12     13     private String pwd;//密码14     15     private String path;//aaa路径16 17     public String getIpAddr() {18         return ipAddr;19     }20 21     public void setIpAddr(String ipAddr) {22         this.ipAddr = ipAddr;23     }24 25     public Integer getPort() {26         return port;27     }28 29     public void setPort(Integer port) {30         this.port = port;31     }32 33     public String getUserName() {34         return userName;35     }36 37     public void setUserName(String userName) {38         this.userName = userName;39     }40 41     public String getPwd() {42         return pwd;43     }44 45     public void setPwd(String pwd) {46         this.pwd = pwd;47     }48 49     public String getPath() {50         return path;51     }52 53     public void setPath(String path) {54         this.path = path;55     }56     57     58 }

 

  1 import java.io.File;  2 import java.io.FileInputStream;  3 import java.io.FileOutputStream;  4 import java.io.IOException;  5 import java.io.OutputStream;  6   7   8 import org.apache.commons.net.ftp.FTPClient;  9 import org.apache.commons.net.ftp.FTPFile; 10 import org.apache.commons.net.ftp.FTPReply; 11 import org.apache.log4j.Logger; 12  13 public class FtpUtil { 14      15     private static Logger logger=Logger.getLogger(FtpUtil.class); 16      17     private static FTPClient ftp; 18      19     /** 20      * 获取ftp连接 21      * @param f 22      * @return 23      * @throws Exception 24      */ 25     public static boolean connectFtp(Ftp f) throws Exception{ 26         ftp=new FTPClient(); 27         boolean flag=false; 28         int reply; 29         if (f.getPort()==null) { 30             ftp.connect(f.getIpAddr(),21); 31         }else{ 32             ftp.connect(f.getIpAddr(),f.getPort()); 33         } 34         ftp.login(f.getUserName(), f.getPwd()); 35         ftp.setFileType(FTPClient.BINARY_FILE_TYPE); 36         reply = ftp.getReplyCode();       37         if (!FTPReply.isPositiveCompletion(reply)) {       38               ftp.disconnect();       39               return flag;       40         }       41         ftp.changeWorkingDirectory(f.getPath());       42         flag = true;       43         return flag; 44     } 45      46     /** 47      * 关闭ftp连接 48      */ 49     public static void closeFtp(){ 50         if (ftp!=null && ftp.isConnected()) { 51             try { 52                 ftp.logout(); 53                 ftp.disconnect(); 54             } catch (IOException e) { 55                 e.printStackTrace(); 56             } 57         } 58     } 59      60     /** 61      * ftp上传文件 62      * @param f 63      * @throws Exception 64      */ 65     public static void upload(File f) throws Exception{ 66         if (f.isDirectory()) { 67             ftp.makeDirectory(f.getName()); 68             ftp.changeWorkingDirectory(f.getName()); 69             String[] files=f.list(); 70             for(String fstr : files){ 71                 File file1=new File(f.getPath()+"/"+fstr); 72                 if (file1.isDirectory()) { 73                     upload(file1); 74                     ftp.changeToParentDirectory(); 75                 }else{ 76                     File file2=new File(f.getPath()+"/"+fstr); 77                     FileInputStream input=new FileInputStream(file2); 78                     ftp.storeFile(file2.getName(),input); 79                     input.close(); 80                 } 81             } 82         }else{ 83             File file2=new File(f.getPath()); 84             FileInputStream input=new FileInputStream(file2); 85             ftp.storeFile(file2.getName(),input); 86             input.close(); 87         } 88     } 89      90     /** 91      * 下载链接配置 92      * @param f 93      * @param localBaseDir 本地目录 94      * @param remoteBaseDir 远程目录 95      * @throws Exception 96      */ 97     public static void startDown(Ftp f,String localBaseDir,String remoteBaseDir ) throws Exception{ 98         if (FtpUtil.connectFtp(f)) { 99             100             try { 101                 FTPFile[] files = null; 102                 boolean changedir = ftp.changeWorkingDirectory(remoteBaseDir); 103                 if (changedir) { 104                     ftp.setControlEncoding("GBK"); 105                     files = ftp.listFiles(); 106                     for (int i = 0; i < files.length; i++) { 107                         try{ 108                             downloadFile(files[i], localBaseDir, remoteBaseDir); 109                         }catch(Exception e){ 110                             logger.error(e); 111                             logger.error("<"+files[i].getName()+">下载失败"); 112                         } 113                     } 114                 } 115             } catch (Exception e) { 116                 logger.error(e); 117                 logger.error("下载过程中出现异常"); 118             } 119         }else{120             logger.error("链接失败!");121         }122         123     }124     125     126     /** 127      * 128      * 下载FTP文件 129      * 当你需要下载FTP文件的时候,调用此方法 130      * 根据<b>获取的文件名,本地地址,远程地址</b>进行下载 131      * 132      * @param ftpFile 133      * @param relativeLocalPath 134      * @param relativeRemotePath 135      */ 136     private  static void downloadFile(FTPFile ftpFile, String relativeLocalPath,String relativeRemotePath) { 137         if (ftpFile.isFile()) {138             if (ftpFile.getName().indexOf("?") == -1) { 139                 OutputStream outputStream = null; 140                 try { 141                     File locaFile= new File(relativeLocalPath+ ftpFile.getName()); 142                     //判断文件是否存在,存在则返回 143                     if(locaFile.exists()){ 144                         return; 145                     }else{ 146                         outputStream = new FileOutputStream(relativeLocalPath+ ftpFile.getName()); 147                         ftp.retrieveFile(ftpFile.getName(), outputStream); 148                         outputStream.flush(); 149                         outputStream.close(); 150                     } 151                 } catch (Exception e) { 152                     logger.error(e);153                 } finally { 154                     try { 155                         if (outputStream != null){ 156                             outputStream.close(); 157                         }158                     } catch (IOException e) { 159                        logger.error("输出文件流异常"); 160                     } 161                 } 162             } 163         } else { 164             String newlocalRelatePath = relativeLocalPath + ftpFile.getName(); 165             String newRemote = new String(relativeRemotePath+ ftpFile.getName().toString()); 166             File fl = new File(newlocalRelatePath); 167             if (!fl.exists()) { 168                 fl.mkdirs(); 169             } 170             try { 171                 newlocalRelatePath = newlocalRelatePath + ‘/‘; 172                 newRemote = newRemote + "/"; 173                 String currentWorkDir = ftpFile.getName().toString(); 174                 boolean changedir = ftp.changeWorkingDirectory(currentWorkDir); 175                 if (changedir) { 176                     FTPFile[] files = null; 177                     files = ftp.listFiles(); 178                     for (int i = 0; i < files.length; i++) { 179                         downloadFile(files[i], newlocalRelatePath, newRemote); 180                     } 181                 } 182                 if (changedir){183                     ftp.changeToParentDirectory(); 184                 } 185             } catch (Exception e) { 186                 logger.error(e);187             } 188         } 189     } 190 191     192     public static void main(String[] args) throws Exception{  193             Ftp f=new Ftp();194             f.setIpAddr("1111");195             f.setUserName("root");196             f.setPwd("111111");197             FtpUtil.connectFtp(f);198             File file = new File("F:/test/com/test/Testng.java");  199             FtpUtil.upload(file);//把文件上传在ftp上200             FtpUtil.startDown(f, "e:/",  "/xxtest");//下载ftp文件测试201             System.out.println("ok");202           203        }  204     205 }

以上代码均测试通过了。。。

 

 

技术分享

 

 

 

项目及相关包下载:http://pan.baidu.com/s/1hq5p7NI

 

 

天天进步......天天更新

java实现ftp文件的上传与下载