java FTP上传和下载文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java FTP上传和下载文件相关的知识,希望对你有一定的参考价值。

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

 

Code

 

以上是关于java FTP上传和下载文件的主要内容,如果未能解决你的问题,请参考以下文章

Java 实现ftp 文件上传下载和删除

我的代码库-Java8实现FTP与SFTP文件上传下载

java在浏览器上获取FTP读文件路径

java FTP上传和下载文件

怎么用Java实现FTP上传

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