天天看点

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鏈嶅姟鍣ㄧ鍙e彿
	   * @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;
	  }
	  
	  /**
	   * 涓婁紶鏂囦欢锛堝彲渚汚ction/Controller灞備娇鐢級
	   * @param hostname FTP鏈嶅姟鍣ㄥ湴鍧€
	   * @param port  FTP鏈嶅姟鍣ㄧ鍙e彿
	   * @param username  FTP鐧诲綍甯愬彿
	   * @param password  FTP鐧诲綍瀵嗙爜
	   * @param pathname  FTP鏈嶅姟鍣ㄤ繚瀛樼洰褰?	   * @param fileName  涓婁紶鍒癋TP鏈嶅姟鍣ㄥ悗鐨勬枃浠跺悕绉?	   * @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鏈嶅姟鍣ㄧ鍙e彿
	   * @param username  FTP鐧诲綍甯愬彿
	   * @param password  FTP鐧诲綍瀵嗙爜
	   * @param pathname  FTP鏈嶅姟鍣ㄤ繚瀛樼洰褰?	   * @param filename  涓婁紶鍒癋TP鏈嶅姟鍣ㄥ悗鐨勬枃浠跺悕绉?	   * @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鏈嶅姟鍣ㄧ鍙e彿
	   * @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鏈嶅姟鍣ㄧ鍙e彿
	   * @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[]  杞崲鍩巄ase64瀛楃涓?    Base64.getEncoder().encode(ret)
	  
}