FTP常用工具类**********************

maven依赖

<!--ftp-->
		<dependency>
			<groupId>commons-net</groupId>
			<artifactId>commons-net</artifactId>
			<version>3.6</version>
		</dependency>

工具类



import java.io.*;

import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;


/**
 * 
 * @author XXX 2017-07-07
 *
 */
public class FtpUtil {

	/**
	   * 下载文件
	   * @param hostname FTP服务器地址
	   * @param port  FTP服务器端口号
	   * @param username  FTP登录帐号
	   * @param password  FTP登录密码
	   * @param pathname  FTP服务器文件目录
	   * @param filename  weixinRefund_2017-06-20weixinRefund_2017-06-20weixinRefund_2017-06-20weixinRefund_2017-06-20weixinRefund_2017-06-20
	   * @param localpath 下载后的文件路径
	   * @return
	   */
	  public static boolean downloadFile(String hostname, int port, String username, String password, String pathname, String filename, String localpath){
	    boolean flag = false;
	    FTPClient ftpClient = new FTPClient();
	    //ftp中文编码格式设置
	    String LOCAL_CHARSET="GBK";
	    try {
	    	try {
	    		ftpClient.setConnectTimeout(1000);//连接时间超过一秒即为超时
	  	      //连接FTP服务器
	  	      	ftpClient.connect(hostname, port);
	  	      //登录FTP服务器
	  	      	ftpClient.login(username, password);
	  	      //验证FTP服务器是否登录成功
	  	      	int replyCode = ftpClient.getReplyCode();
	  	      	if(!FTPReply.isPositiveCompletion(replyCode)){
	  	        return flag;
	  	      	}
			} catch (Exception e) {
				throw new Exception("login ftp error!");
			}
	      //设置ftp编码格式
	      ftpClient.setControlEncoding(LOCAL_CHARSET);
	      //切换FTP目录
	      pathname=new String(pathname.getBytes("GBK"),"iso-8859-1");//如果目录名有中文则做编码格式转换
	      if (!ftpClient.changeWorkingDirectory(pathname)) {// 如果不能进入dir下,说明此目录不存在!  
                  System.out.println("创建文件目录【"+pathname+"】 失败!");  
                  return flag;
          } 
	      FTPFile[] ftpFiles = ftpClient.listFiles();
	      for(FTPFile file : ftpFiles){
	        if(filename.equalsIgnoreCase(file.getName())){
	          file.setName(new String(file.getName().getBytes("GBK"),"iso-8859-1"));//如果文件名名有中文则做编码格式转换
	          File localFile = new File(localpath);
	          OutputStream os = new FileOutputStream(localFile);
	          ftpClient.retrieveFile(file.getName(), os);
	          os.close();
	        }
	      }
	      ftpClient.logout();
	      flag = true;
	    } catch (Exception e) {
	      e.printStackTrace();
	      e.getMessage();
	    } finally{
	      if(ftpClient.isConnected()){
	        try {
	          ftpClient.logout();
	        } catch (IOException e) {
	          
	        }
	      }
	    }
	    return flag;
	  }
	  
	  /**
	   * 上传文件(可供Action/Controller层使用)
	   * @param hostname FTP服务器地址
	   * @param port  FTP服务器端口号
	   * @param username  FTP登录帐号
	   * @param password  FTP登录密码
	   * @param pathname  FTP服务器保存目录
	   * @param fileName  上传到FTP服务器后的文件名称
	   * @param inputStream 输入文件流
	   * @return
	   */
	  public static boolean uploadFile(String hostname, int port, String username, String password, String pathname, String fileName, InputStream inputStream){
	  	boolean flag = false;
	    FTPClient ftpClient = new FTPClient();
	    ftpClient.setControlEncoding("UTF-8");
	    try {
	    	try {
	    		ftpClient.setConnectTimeout(1000);//连接时间超过一秒即为超时
	  	      //连接FTP服务器
	  	      	ftpClient.connect(hostname, port);
	  	      //登录FTP服务器
	  	      	ftpClient.login(username, password);
	  	      //验证FTP服务器是否登录成功
	  	      	int replyCode = ftpClient.getReplyCode();
	  	      	if(!FTPReply.isPositiveCompletion(replyCode)){
	  	        return flag;
	  	      	}
			} catch (Exception e) {
				throw new Exception("connect ftp error!");
			}
	      
	      //pathname=new String(pathname.getBytes("UTF-8"),"iso-8859-1");//如果目录名有中文则做编码格式转换
	      ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
	      if (!ftpClient.changeWorkingDirectory(pathname)) {// 如果不能进入dir下,说明此目录不存在!  
              if (!ftpClient.makeDirectory(pathname)) {  
                  System.out.println("创建文件目录【"+pathname+"】 失败!");  
              }  
          }
	      ftpClient.enterLocalPassiveMode();
	      ftpClient.storeFile(fileName, inputStream);
	      inputStream.close();
	      ftpClient.logout();
	      flag = true;
	    } catch (Exception e) {
	      e.printStackTrace();
	    } finally{
	      if(ftpClient.isConnected()){
	        try {
	          ftpClient.disconnect();
	        } catch (IOException e) {
	          e.printStackTrace();
	        }
	      }
	    }
	    return flag;
	  }
	    
	    
	  /**
	   * 上传文件(可对文件进行重命名)
	   * @param hostname FTP服务器地址
	   * @param port  FTP服务器端口号
	   * @param username  FTP登录帐号
	   * @param password  FTP登录密码
	   * @param pathname  FTP服务器保存目录
	   * @param filename  上传到FTP服务器后的文件名称
	   * @param originfilename 待上传文件的名称(绝对地址)
	   * @return
	   */
	  public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String filename, String originfilename){
	    boolean flag = false;
	    try {
	      InputStream inputStream = new FileInputStream(new File(originfilename));
	      flag = uploadFile(hostname, port, username, password, pathname, filename, inputStream);
	      System.out.println(flag);
	    } catch (Exception e) {
	      e.printStackTrace();
	    }
	    return flag;
	  }
	    
	  /**
	   * 上传文件(不可以进行文件的重命名操作)
	   * @param hostname FTP服务器地址
	   * @param port  FTP服务器端口号
	   * @param username  FTP登录帐号
	   * @param password  FTP登录密码
	   * @param pathname  FTP服务器保存目录
	   * @param originfilename 待上传文件的名称(绝对地址)
	   * @return
	   */
	  public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String originfilename){
	    boolean flag = false;
	    try {
	      String fileName = new File(originfilename).getName();
	      InputStream inputStream = new FileInputStream(new File(originfilename));
	      flag = uploadFile(hostname, port, username, password, pathname, fileName, inputStream);
	      System.out.println(flag);
	    } catch (Exception e) {
	      e.printStackTrace();
	    }
	    return flag;
	  }
	    
	    
	  /**
	   * 删除文件
	   * @param hostname FTP服务器地址
	   * @param port  FTP服务器端口号
	   * @param username  FTP登录帐号
	   * @param password  FTP登录密码
	   * @param pathname  FTP服务器保存目录
	   * @param filename  要删除的文件名称
	   * @return
	   */
	  public static boolean deleteFile(String hostname, int port, String username, String password, String pathname, String filename){
	    boolean flag = false;
	    FTPClient ftpClient = new FTPClient();
	    try {
	    	try {
	    		ftpClient.setConnectTimeout(1000);//连接时间超过一秒即为超时
	  	      //连接FTP服务器
	  	      	ftpClient.connect(hostname, port);
	  	      //登录FTP服务器
	  	      	ftpClient.login(username, password);
	  	      //验证FTP服务器是否登录成功
	  	      	int replyCode = ftpClient.getReplyCode();
	  	      	if(!FTPReply.isPositiveCompletion(replyCode)){
	  	        return flag;
	  	      	}
			} catch (Exception e) {
				throw new Exception("login ftp error!");
			}
	      //切换FTP目录
	      ftpClient.changeWorkingDirectory(pathname);
	      ftpClient.dele(filename);
	      ftpClient.logout();
	      flag = true;
	    } catch (Exception e) {
	      e.printStackTrace();
	    } finally{
	      if(ftpClient.isConnected()){
	        try {
	          ftpClient.logout();
	        } catch (IOException e) {
	          
	        }
	      }
	    }
	    return flag;
	  }

	private FTPClient newFtpClient(String host, String user, String pwd) throws Exception {
		FTPClient ftp = new FTPClient();
		//ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
		int reply;
		ftp.connect(host);
		reply = ftp.getReplyCode();
		if (!FTPReply.isPositiveCompletion(reply)) {
			ftp.disconnect();
			throw new Exception("Exception in connecting to FTP Server");
		}
		ftp.login(user, pwd);
		ftp.setFileType(FTP.BINARY_FILE_TYPE);
		ftp.enterLocalPassiveMode();
		return ftp;
	}

	/**
	 * 根据地址直接获取文件内容
	 * @param absp
	 * @return
	 */
	public  byte[] getFile(String absp,String Host,String Username,String Password) {
		byte[] ret = null;
		try {
			FTPClient ftp = newFtpClient(Host, Username, Password);
			InputStream is = ftp.retrieveFileStream(absp);
			if (is != null) {
				ret = IOUtils.toByteArray(is);
				is.close();
			}else{
				System.out.println("找不到文件");
			}
		} catch (Exception e) {
			ret = null;
		}
		return ret;
	}
    //可以将获取的byte[]  转换城base64字符串
    Base64.getEncoder().encode(ret)
	  
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值