ftp上傳下載文件,是遵守ftp協議上傳下載文件的,本例僅如下載文件爲例。java
重要的方法解釋:apache
1.FTP功能相關依賴路徑:org.apache.commons.net.ftp.*;服務器
2.ftp默認端口是21,若是非默認端口鏈接,需指定:ftp.connect(ftphostaddr, 22);//22爲端口號url
3.ftp.changeWorkingDirectory(ftppath) //實現切換目錄.net
4.FTPFile[] fs = ftp.listFiles(); 獲取指定目錄下的文件列表blog
public class FtpTools { private final static String ftphostaddr = "xxx";//服務器地址 private final static String ftppath = "xxx";//操做的服務器目錄 private final static String ftpname = "xxx";//服務器登陸名 private final static String ftppwd = "xxx";//登陸密碼 private final static String localpath = getCurentContentPath()+"uploadfiles"; private final static String fileSeparator = System.getProperty("file.separator"); private static final Logger LOGGER = Logger.getLogger(FtpTools.class); public static void main(String[] args) { FtpTools tools = new FtpTools(); tools.downFile("test.txt"); } /** * 從文件服務器上下載文件到本地 * @param filename */ public static void downFile(String filename) { FTPClient ftp = initFtp(); try{ //4.指定要下載的目錄 ftp.changeWorkingDirectory(ftppath);// 轉移到FTP服務器目錄 //5.遍歷下載的目錄 FTPFile[] fs = ftp.listFiles(); for (FTPFile ff : fs) { //解決中文亂碼問題,兩次解碼 byte[] bytes=ff.getName().getBytes("iso-8859-1"); String fn=new String(bytes,"utf8"); if (fn.equals(filename)) { //6.寫操做,將其寫入到本地文件中 LOGGER.info("下載文件:"+filename+"開始:"+System.currentTimeMillis()); File localFile = new File(localpath +fileSeparator+ ff.getName()); OutputStream is = new FileOutputStream(localFile); ftp.retrieveFile(ff.getName(), is); //7.判斷本地文件是否正確寫入,若是正確寫入,將文件服務器上的文件刪除 if(localFile.exists()){ LOGGER.info("刪除服務器上文件:"+filename); ftp.deleteFile(ff.getName()); } LOGGER.info("下載文件:"+filename+"結束:"+System.currentTimeMillis()); is.close(); } } ftp.logout(); }catch(Exception e){ e.printStackTrace(); new Exception("從服務器下載文件過程當中發生錯誤"); }finally{ if (ftp.isConnected()) { try { ftp.disconnect(); } catch (IOException ioe) { ioe.printStackTrace(); } } } } public static FTPClient initFtp() { int reply; FTPClient ftp = new FTPClient(); try { // 1.鏈接服務器 //ftp.connect(ftphostaddr); ftp.connect(ftphostaddr, 22); // 2.登陸服務器 若是採用默認端口,能夠使用ftp.connect(url)的方式直接鏈接FTP服務器 ftp.login(ftpname, ftppwd); // 3.判斷登錄是否成功 reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); } } catch (Exception e) { e.printStackTrace(); new Exception("服務器鏈接失敗"); } return ftp; } public static String getCurentContentPath(){ String path = ""; path = FtpTools.class.getClassLoader().getResource("").toString(); path = path.replace("file:", "").substring(0, path.indexOf("WEB-INF")).replace("WEB-IN", "").replace("WEB-I", ""); return path; } }