FtpUtil.java
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.SocketException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; public class FtpUtil { private final static Log logger = LogFactory.getLog(FtpUtil.class); /** * 獲取FTPClient對象 * * @param ftpHost * FTP主機服務器 * @param ftpPassword * FTP 登錄密碼 * @param ftpUserName * FTP登錄用戶名 * @param ftpPort * FTP端口 默認為21 * @return */ public static FTPClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort) { FTPClient ftpClient = new FTPClient(); try { ftpClient = new FTPClient(); ftpClient.connect(ftpHost, ftpPort);// 連接FTP服務器 ftpClient.login(ftpUserName, ftpPassword);// 登陸FTP服務器 if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { logger.info("未連接到FTP,用戶名或密碼錯誤。"); ftpClient.disconnect(); } else { logger.info("FTP連接成功。"); } } catch (SocketException e) { e.printStackTrace(); logger.info("FTP的IP地址可能錯誤,請正確配置。"); } catch (IOException e) { e.printStackTrace(); logger.info("FTP的端口錯誤,請正確配置。"); } return ftpClient; } /** * 下載文件 * * @param ftpHost ftp服務器地址 * @param ftpUserName anonymous匿名用戶登錄,不需要密碼。administrator指定用戶登錄 * @param ftpPassword 指定用戶密碼 * @param ftpPort ftp服務員器端口號 * @param ftpPath ftp文件存放物理路徑 * @param fileName 文件路徑 * @param input 文件輸入流,即從本地服務器讀取文件的IO輸入流 */ public static void downloadFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort, String ftpPath, String localPath, String fileName) { FTPClient ftpClient = null; try { ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort); ftpClient.setControlEncoding("UTF-8"); // 中文支持 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); ftpClient.changeWorkingDirectory(ftpPath); File localFile = new File(localPath + File.separatorChar + fileName); OutputStream os = new FileOutputStream(localFile); ftpClient.retrieveFile(fileName, os); os.close(); ftpClient.logout(); } catch (FileNotFoundException e) { logger.error("沒有找到" + ftpPath + "文件"); e.printStackTrace(); } catch (SocketException e) { logger.error("連接FTP失敗."); e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); logger.error("文件讀取錯誤。"); e.printStackTrace(); } } /** * 上傳文件 * * @param ftpHost ftp服務器地址 * @param ftpUserName anonymous匿名用戶登錄,不需要密碼。administrator指定用戶登錄 * @param ftpPassword 指定用戶密碼 * @param ftpPort ftp服務員器端口號 * @param ftpPath ftp文件存放物理路徑 * @param fileName 文件路徑 * @param input 文件輸入流,即從本地服務器讀取文件的IO輸入流 */ public static void uploadFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort, String ftpPath, String fileName,InputStream input){ FTPClient ftp=null; try { ftp=getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort); ftp.changeWorkingDirectory(ftpPath); ftp.setFileType(FTP.BINARY_FILE_TYPE); fileName=new String(fileName.getBytes("GBK"),"iso-8859-1"); ftp.storeFile(fileName, input); input.close(); ftp.logout(); System.out.println("upload succes!"); } catch (Exception e) { e.printStackTrace(); } } }
FtpTest.java
import java.io.File; import java.io.FileInputStream; import org.junit.Test; public class FtpTest { String ftpHost= "192.168.xx.xx"; //ftp服務器地址 int ftpPort = 21;//ftp服務員器端口號 String ftpUserName = "administrator";//anonymous匿名用戶登錄,不需要密碼。administrator指定用戶登錄 String ftpPassword = "888888";//指定用戶密碼 String ftpPath = "ftpdir/"; //ftp文件存放物理路徑 String filePath=""; //文件路徑 String fileName="";//文件名稱 @Test public void test() throws Exception { filePath="E:/download"; fileName="11.txt"; FtpUtil.downloadFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, filePath, fileName); filePath="E:/upload"; fileName="upload.txt"; FileInputStream input=new FileInputStream(new File(filePath+File.separatorChar+fileName)); FtpUtil.uploadFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, fileName, input); } }