Java FTP 下載文件和文件夾

jopen 11年前發布 | 32K 次閱讀 Java FTP 文件上傳

用apache下的common-net.jar包開發Java FTP下載功能

導入apache-net-2.0.jar到工程中以及其他jar


 import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.SocketException;

import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import org.apache.log4j.Logger;

/**

  • 采用的是apache commons-net架包中的ftp工具類實現的
  • @author chiyong
  • */ public class FtpCollectionUtil { private String username; private String password; private String ftpHostName; private int port = 21; private FTPClient ftpClient = new FTPClient(); private FileOutputStream fos = null; private Logger logger = Logger.getLogger(FtpCollectionUtil.class);

public FtpCollectionUtil(String username, String password, String ftpHostName, int port) { super(); this.username = username; this.password = password; this.ftpHostName = ftpHostName; this.port = port; }

/**

  • 建立連接b */ private void connect() { try { logger.debug("開始連接"); // 連接 ftpClient.connect(ftpHostName, port); int reply = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftpClient.disconnect(); } // 登錄 ftpClient.login(username, password); ftpClient.setBufferSize(256);

ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

ftpClient.setControlEncoding("utf8"); logger.debug("登錄成功!"); logger.debug("開始登錄!"); } catch (SocketException e) { logger.error("", e); } catch (IOException e) { logger.error("", e); }

} /**

  • 關閉輸入輸出流
  • @param fos */ private void close(FileOutputStream fos) { try { if (fos != null) { fos.close(); }

ftpClient.logout(); logger.info("退出登錄"); ftpClient.disconnect(); logger.info("關閉連接"); } catch (IOException e) { logger.error("", e); } }

/**

  • 下載文件
  • @param ftpFileName
  • @param localDir */ public void down(String ftpFileName, String localDir) { connect(); downFileOrDir(ftpFileName, localDir); close(fos); }

private void downFileOrDir(String ftpFileName, String localDir) { try { File file = new File(ftpFileName);

File temp = new File(localDir);

if (!temp.exists()) { temp.mkdirs(); } // 判斷是否是目錄 if (isDir(ftpFileName)) { String[] names = ftpClient.listNames(); for (int i = 0; i < names.length; i++) { System.out.println(names[i] + "^^^^^^^^^^^^^^"); if (isDir(names[i])) { downFileOrDir(ftpFileName + '/' + names[i], localDir

  • File.separator + names[i]); ftpClient.changeToParentDirectory(); } else { File localfile = new File(localDir + File.separator
  • names[i]); if (!localfile.exists()) { fos = new FileOutputStream(localfile); ftpClient.retrieveFile(names[i], fos);

} else { logger.debug("開始刪除文件"); file.delete(); logger.debug("文件已經刪除"); fos = new FileOutputStream(localfile); ftpClient.retrieveFile(ftpFileName, fos);

}

} } } else {

File localfile = new File(localDir + File.separator

  • file.getName()); if (!localfile.exists()) { fos = new FileOutputStream(localfile); ftpClient.retrieveFile(ftpFileName, fos);

} else { logger.debug("開始刪除文件"); file.delete(); logger.debug("文件已經刪除"); fos = new FileOutputStream(localfile); ftpClient.retrieveFile(ftpFileName, fos);

} ftpClient.changeToParentDirectory();

}

logger.info("下載成功!"); } catch (SocketException e) { logger.error("連接失敗!", e); } catch (IOException e) { logger.error("下載失敗!", e); }

}

// 判斷是否是目錄 public boolean isDir(String fileName) { try { // 切換目錄,若當前是目錄則返回true,否則返回true。 boolean falg = ftpClient.changeWorkingDirectory(fileName); return falg; } catch (Exception e) { e.printStackTrace(); logger.error("", e); }

return false; }

public String getUsername() { return username; } public void setUsername(String username) { this.username = username; }

public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }

public String getFtpHostName() { return ftpHostName; } public void setFtpHostName(String ftpHostName) { this.ftpHostName = ftpHostName; }

public int getPort() { return port; } public void setPort(int port) { this.port = port; } public class TestFileUtil {

public static void main(String[] args) { /**

  • apache common-net實現的 */ FtpCollectionUtil ftpUtil = new FtpCollectionUtil("webfocus1", "webfocus1", "192.168.0.2", 21);

// /home/webfocus1/apache-tomcat-6.0.37/webapps/NEZA_ROOT/要下載的文件夾。 ftpUtil.down( "/home/webfocus1/apache-tomcat-6.0.37/webapps/NEZA_ROOT/", "D://a");

} }

} </pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!