FTP--實踐可用
阿新 • • 發佈:2017-05-08
length trace 註意 mod binary created ash raft 文件
package sunline.common.logic.Utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.SocketException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; 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; import org.apache.log4j.Logger; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.sunline.flow.base.annotation.Bizlet; /** * * @author niucheng created 2017/05/08 * */ public class FTPUtil { private static Logger logger = Logger.getLogger(FTPUtil.class); private static FTPClient ftpClient = null; // 連接FTP服務器 @Bizlet("連接FTP服務器") public static boolean connect(String host, int port, String username, String password) { ftpClient = new FTPClient(); boolean loginFlag = false; try { ftpClient.setControlEncoding("GBK"); // 連接遠程主機 ftpClient.connect(host, port); if (password == null) { password = ""; } // 登陸遠程主機 loginFlag = ftpClient.login(username, password); ftpClient.setDataTimeout(120000); ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); if (loginFlag == false) { logger.info("登錄FTP遠程主機失敗"); ftpClient.logout(); if (ftpClient.isConnected()) { ftpClient.disconnect(); } throw new Exception("登錄失敗!"); } else { logger.info("登錄FTP遠程主機成功"); return true; } } catch (Exception e) { new Exception("連接FTP服務器出錯"); } return false; } /** * 註意:上傳FTP時的絕對路徑包括/dir/文件名,文件名跟本地要上傳的文件名對應,切記切記 * @param local * 本地文件絕對路徑 * @param remoteDirectory * 遠程FTP文件絕對路徑(包括文件名) * @param localFileName * @return * @throws Exception */ @Bizlet(value = "上傳文件") public static boolean upLoadFileFtp(String local, String remoteDirectory, String localFileName) throws Exception { InputStream is = null; boolean result = false; if (!ftpClient.isConnected()) { logger.info("FTP未連接"); return false; } try { if (remoteDirectory != null && local != null) { //註意:這裏的本地文件路徑和FTP文件保存路徑都是絕對路徑(包括文件名,切記) remoteDirectory = new String((remoteDirectory + localFileName).getBytes("GBK"), "ISO-8859-1"); local = new String((local + localFileName).getBytes("GBK"), "ISO-8859-1"); is = new FileInputStream(new File(local)); // 轉移到FTP服務器目錄 boolean changeWorkingDirectory = ftpClient .changeWorkingDirectory(remoteDirectory); result = ftpClient.storeFile(remoteDirectory, is); System.out.println("上傳結果" + localFileName + result); if (result) { logger.info("文件" + localFileName + "上傳成功"); } else { logger.info("文件" + localFileName + "上傳失敗"); } } } catch (Exception e) { new Exception("文件上傳出錯"); } finally { if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } @Bizlet("批量上傳文件") public static boolean bacthUploadFileFtp(String remoteDirectory, String localPath) { boolean result = false; try { File file = new File(localPath); File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { // bak代表備份文件,-1代表不是備份文件 if (files[i].isFile() && files[i].getName().indexOf("bak") == -1) { result = upLoadFileFtp(localPath, remoteDirectory, files[i].getName()); } } if (result == true) { logger.info("批量上傳文件成功"); } else { logger.info("批量上傳文件失敗"); } } catch (Exception e) { e.printStackTrace(); } finally { try { ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); } } return result; } // 判斷FTP目錄是否存在 public static boolean isDirExist(String dir) { boolean flag = false; try { FTPFile[] ftpFileArr = ftpClient.listFiles(dir); System.out.println("目錄不存在---------" + ftpFileArr.length); if (ftpFileArr.length > 0) { flag = true; } } catch (IOException e1) { return false; } return flag; } // 創建FTP目錄 public static boolean creatFtpDir(String ftpDir) { boolean flag = false; try { // 如果目錄不存在就創建目錄 if (isDirExist(ftpDir) == false) { flag = ftpClient.makeDirectory(ftpDir); System.out.println("創建目錄" + ftpDir + "結果:" + flag); } } catch (Exception e) { new Exception("創建 " + ftpDir + "目錄出錯"); } return flag; } /*public static void main(String[] args) throws Exception { boolean connect = connect("160.161.12.122", 21, "sn", "sn"); System.out.println("連接是否成功:" + connect); String remoteDirectory = "/home/sncx/ftp_data/bach/ibs/"; String localPath = "D:/upload/"; boolean up = bacthUploadFileFtp(remoteDirectory, localPath); System.out.println("上傳結果---" + up); }*/ }
FTP--實踐可用