java ftp 上传下载工具类

Posted

tags:

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

  1 package com.mohecun.utils;
  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.InputStream;
  9 import java.io.OutputStream;
 10 
 11 import org.apache.commons.net.ftp.FTP;
 12 import org.apache.commons.net.ftp.FTPClient;
 13 import org.apache.commons.net.ftp.FTPFile;
 14 import org.apache.commons.net.ftp.FTPReply;
 15 
 16 /**
 17  * ftp上传下载工具类
 18  * <p>Title: FtpUtil</p>
 19  * <p>Description: </p>
 20  * <p>Company: www.itcast.com</p> 
 21  * @version 1.0
 22  */
 23 public class FtpUtil {
 24 
 25     /** 
 26      * Description: 向FTP服务器上传文件 
 27      * @param host FTP服务器hostname 
 28      * @param port FTP服务器端口 
 29      * @param username FTP登录账号 
 30      * @param password FTP登录密码 
 31      * @param basePath FTP服务器基础目录
 32      * @param filePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath
 33      * @param filename 上传到FTP服务器上的文件名 
 34      * @param input 输入流 
 35      * @return 成功返回true,否则返回false 
 36      */  
 37     public static boolean uploadFile(String host, int port, String username, String password, String basePath,
 38             String filePath, String filename, InputStream input) {
 39         boolean result = false;
 40         FTPClient ftp = new FTPClient();
 41         try {
 42             int reply;
 43             ftp.connect(host, port);// 连接FTP服务器
 44             // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
 45             ftp.login(username, password);// 登录
 46             reply = ftp.getReplyCode();
 47             if (!FTPReply.isPositiveCompletion(reply)) {
 48                 ftp.disconnect();
 49                 return result;
 50             }
 51             //切换到上传目录
 52             if (!ftp.changeWorkingDirectory(basePath+filePath)) {
 53                 //如果目录不存在创建目录
 54                 String[] dirs = filePath.split("/");
 55                 String tempPath = basePath;
 56                 for (String dir : dirs) {
 57                     if (null == dir || "".equals(dir)) continue;
 58                     tempPath += "/" + dir;
 59                     if (!ftp.changeWorkingDirectory(tempPath)) {
 60                         if (!ftp.makeDirectory(tempPath)) {
 61                             return result;
 62                         } else {
 63                             ftp.changeWorkingDirectory(tempPath);
 64                         }
 65                     }
 66                 }
 67             }
 68             //设置上传文件的类型为二进制类型
 69             ftp.setFileType(FTP.BINARY_FILE_TYPE);
 70             //上传文件
 71             if (!ftp.storeFile(filename, input)) {
 72                 return result;
 73             }
 74             input.close();
 75             ftp.logout();
 76             result = true;
 77         } catch (IOException e) {
 78             e.printStackTrace();
 79         } finally {
 80             if (ftp.isConnected()) {
 81                 try {
 82                     ftp.disconnect();
 83                 } catch (IOException ioe) {
 84                 }
 85             }
 86         }
 87         return result;
 88     }
 89     
 90     /** 
 91      * Description: 从FTP服务器下载文件 
 92      * @param host FTP服务器hostname 
 93      * @param port FTP服务器端口 
 94      * @param username FTP登录账号 
 95      * @param password FTP登录密码 
 96      * @param remotePath FTP服务器上的相对路径 
 97      * @param fileName 要下载的文件名 
 98      * @param localPath 下载后保存到本地的路径 
 99      * @return 
100      */  
101     public static boolean downloadFile(String host, int port, String username, String password, String remotePath,
102             String fileName, String localPath) {
103         boolean result = false;
104         FTPClient ftp = new FTPClient();
105         try {
106             int reply;
107             ftp.connect(host, port);
108             // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
109             ftp.login(username, password);// 登录
110             reply = ftp.getReplyCode();
111             if (!FTPReply.isPositiveCompletion(reply)) {
112                 ftp.disconnect();
113                 return result;
114             }
115             ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
116             FTPFile[] fs = ftp.listFiles();
117             for (FTPFile ff : fs) {
118                 if (ff.getName().equals(fileName)) {
119                     File localFile = new File(localPath + "/" + ff.getName());
120 
121                     OutputStream is = new FileOutputStream(localFile);
122                     ftp.retrieveFile(ff.getName(), is);
123                     is.close();
124                 }
125             }
126 
127             ftp.logout();
128             result = true;
129         } catch (IOException e) {
130             e.printStackTrace();
131         } finally {
132             if (ftp.isConnected()) {
133                 try {
134                     ftp.disconnect();
135                 } catch (IOException ioe) {
136                 }
137             }
138         }
139         return result;
140     }
141     
142     public static void main(String[] args) {
143         try {  
144             FileInputStream in=new FileInputStream(new File("D:\\temp\\image\\gaigeming.jpg"));  
145             boolean flag = uploadFile("192.168.25.133", 21, "ftpuser", "ftpuser", "/home/ftpuser/www/images","/2015/01/21", "gaigeming.jpg", in);  
146             System.out.println(flag);  
147         } catch (FileNotFoundException e) {  
148             e.printStackTrace();  
149         }  
150     }
151 }

 

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

java ftp 上传下载工具类

java ftp上传文件 工具类

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

推荐一个java操作ftp的工具类

高可用的Spring FTP上传下载工具类(已解决上传过程常见问题)

java ftp 都有哪些工具类