• FTP下载文件


    //需要注意的是下载文件时的编码格式需要和FTP服务器的编码格式保持一致。搜索代码中的 this.ftpClient.setControlEncoding("GBK");
    package
    net.ssd.publish.web.filter; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.TimeZone; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPClientConfig; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import org.apache.log4j.Logger; import sun.net.ftp.FtpClient; /** * @ClassName FtpClient * @Description TODO: add type description * @author wangzm * @2013-12-12下午2:28:39 */ public class FtpClient1 { private FTPClient ftpClient; private String strIp; private int intPort; private String user; private String password; private static Logger logger = Logger.getLogger(FtpClient1.class.getName()); /* * * Ftp构造函数 */ public FtpClient1(String strIp, int intPort, String user, String Password) { this.strIp = strIp; this.intPort = intPort; this.user = user; this.password = Password; this.ftpClient = new FTPClient(); } /** * @return 判断是否登入成功 * */ public boolean connect() { if (this.ftpClient.isConnected()) return true; boolean isLogin = false; FTPClientConfig ftpClientConfig = new FTPClientConfig(); ftpClientConfig.setServerTimeZoneId(TimeZone.getDefault().getID()); // this.ftpClient.setControlEncoding("GBK"); this.ftpClient.setControlEncoding("UTF-8"); this.ftpClient.configure(ftpClientConfig); try { if (this.intPort > 0) { this.ftpClient.connect(this.strIp, this.intPort); } else { this.ftpClient.connect(this.strIp); } // FTP服务器连接回答 int reply = this.ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { this.ftpClient.disconnect(); logger.error("登录FTP服务失败!"); return isLogin; } isLogin = this.ftpClient.login(this.user, this.password); if(isLogin){ // 设置传输协议 this.ftpClient.enterLocalPassiveMode(); this.ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); logger.info("恭喜" + this.user + "成功登陆FTP服务器"); }else{ throw new RuntimeException("服务器拒绝了连接"); } } catch (Exception e) { e.printStackTrace(); logger.error(this.user + "登录FTP服务失败!" + e.getMessage()); } this.ftpClient.setBufferSize(1024 * 2); this.ftpClient.setDataTimeout(30 * 1000); return isLogin; } /** * @退出关闭服务器链接 * */ public void disconnect() { if (null != this.ftpClient && this.ftpClient.isConnected()) { try { boolean reuslt = this.ftpClient.logout();// 退出FTP服务器 if (reuslt) { logger.info("成功退出服务器"); } } catch (IOException e) { e.printStackTrace(); logger.warn("退出FTP服务器异常!" + e.getMessage()); } finally { try { this.ftpClient.disconnect();// 关闭FTP服务器的连接 } catch (IOException e) { e.printStackTrace(); logger.warn("关闭FTP服务器的连接异常!"); } } } } /*** * 上传Ftp文件 * * @param localFile * 当地文件 * @param romotUpLoadePath上传服务器路径 * - 应该以/结束 * */ public boolean uploadFile(File localFile, String romotUpLoadePath) { return this.uploadFile(localFile, romotUpLoadePath, null); } /** * 上传Ftp文件 * * @param localFile * 本地文件 * @param romoteFileName * 上传到FTP后的文件名称 * @param romotUpLoadePath * 上传到FTP的目录,如果为空就是当前目录 * @return */ public boolean uploadFile(File localFile, String romotUpLoadePath, String romoteFileName) { BufferedInputStream inStream = null; boolean success = false; try { if (romotUpLoadePath != null) { boolean flag = this.ftpClient.changeWorkingDirectory(romotUpLoadePath);// 改变工作路径 if (!flag) { this.ftpClient.makeDirectory(romotUpLoadePath); this.ftpClient.changeWorkingDirectory(romotUpLoadePath); } } inStream = new BufferedInputStream(new FileInputStream(localFile)); logger.info(localFile.getName() + "开始上传....."); if (romoteFileName == null) romoteFileName = localFile.getName(); success = this.ftpClient.storeFile(romoteFileName, inStream); if (success == true) { logger.info(localFile.getName() + "上传成功"); return success; } } catch (FileNotFoundException e) { e.printStackTrace(); logger.error(localFile + "未找到"); } catch (IOException e) { e.printStackTrace(); } finally { if (inStream != null) { try { inStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return success; } /*** * 下载文件 * * @param remoteFileName * 待下载文件名称 * @param localDires * 下载到当地那个路径下 * @param remoteDownLoadPath * remoteFileName所在的路径 * */ public boolean downloadFile(String remoteFileName, String localDires, String remoteDownLoadPath) { String strFilePath = localDires + remoteFileName; BufferedOutputStream outStream = null; boolean success = false; try { this.ftpClient.changeWorkingDirectory(remoteDownLoadPath); File f = new File(strFilePath); if(!f.getParentFile().exists()) f.getParentFile().mkdirs(); outStream = new BufferedOutputStream(new FileOutputStream(f)); logger.info(remoteFileName + "开始下载...."); success = this.ftpClient.retrieveFile(remoteFileName, outStream); if (success == true) { logger.info(remoteFileName + "成功下载到" + strFilePath); return success; } } catch (Exception e) { e.printStackTrace(); logger.error(remoteFileName + "下载失败"); } finally { if (null != outStream) { try { outStream.flush(); outStream.close(); } catch (IOException e) { e.printStackTrace(); } } } if (success == false) { logger.error(remoteFileName + "下载失败!!!"); } return success; } /*** * @上传文件夹 * @param localDirectory * 当地文件夹 * @param remoteDirectoryPath * Ftp 服务器路径 以目录"/"结束 * */ public boolean uploadDirectory(String localDirectory, String remoteDirectoryPath) { File src = new File(localDirectory); try { remoteDirectoryPath = remoteDirectoryPath + src.getName() + "/"; this.ftpClient.makeDirectory(remoteDirectoryPath); // ftpClient.listDirectories(); } catch (IOException e) { e.printStackTrace(); logger.info(remoteDirectoryPath + "目录创建失败"); } File[] allFile = src.listFiles(); if (allFile != null) { for (int currentFile = 0; currentFile < allFile.length; currentFile++) { if (!allFile[currentFile].isDirectory()) { String srcName = allFile[currentFile].getPath().toString(); uploadFile(new File(srcName), remoteDirectoryPath); } } for (int currentFile = 0; currentFile < allFile.length; currentFile++) { if (allFile[currentFile].isDirectory()) { // 递归 uploadDirectory(allFile[currentFile].getPath().toString(), remoteDirectoryPath); } } } return true; } /*** * 下载文件夹 * @param localDirectoryPath本地地址 * @param remoteDirectory * 远程文件夹 * */ public boolean downLoadDirectory(String localDirectoryPath, String remoteDirectory) { try { String fileName = new File(remoteDirectory).getName(); localDirectoryPath = localDirectoryPath + fileName + "//"; new File(localDirectoryPath).mkdirs(); FTPFile[] allFile = this.ftpClient.listFiles(remoteDirectory); if (allFile != null) { for (int currentFile = 0; currentFile < allFile.length; currentFile++) { if (!allFile[currentFile].isDirectory()) { downloadFile(allFile[currentFile].getName(), localDirectoryPath, remoteDirectory); } } for (int currentFile = 0; currentFile < allFile.length; currentFile++) { if (allFile[currentFile].isDirectory()) { String strremoteDirectoryPath = remoteDirectory + "/" + allFile[currentFile].getName(); downLoadDirectory(localDirectoryPath, strremoteDirectoryPath); } } } } catch (IOException e) { e.printStackTrace(); logger.info("下载文件夹失败"); return false; } return true; } /** * 重命名远程文件 * @param name 要改名的原始文件名 * @param newName 新的文件名 * @return * @author wangzm */ public boolean rename(String name, String newName){ boolean r = false; try { r = this.ftpClient.rename(name, newName); } catch (IOException e) { e.printStackTrace(); logger.error("将“"+name+"”重命名为“"+newName+"”失败"); } return r; } // FtpClient的Set 和 Get 函数 public FTPClient getFtpClient() { return ftpClient; } @Deprecated public void setFtpClient(FTPClient ftpClient) { this.ftpClient = ftpClient; } public static void main(String[] args) throws IOException { /*FtpClient ftp = new FtpClient("127.0.0.1", 21, "ftp1", "123"); ftp.connect(); // 上传文件夹 // ftp.uploadDirectory("D:/大连-发布大风黄色20130923171253.doc", "/2013"); ftp.uploadFile(new File("D:/大连-发布大风黄色20130923171253.doc"), "/2013/"); // 下载文件夹 // ftp.downLoadDirectory("d://tmp//", "/home/data/DataProtemp"); ftp.disconnect();*/ FtpClient1 t = new FtpClient1("192.168.0.27", 21, "ssdsms", "ssdsms"); t.connect(); t.downloadFile("云南一键发.txt","D:/", "/"); t.disconnect(); // String s ="asdf{^}sa"; // String[] ss = s.split("\{\^\}"); // logger.info(ss[1]); } }
  • 相关阅读:
    结巴分词 0.14 版发布,Python 中文分词库
    Lazarus 1.0.2 发布,Pascal 集成开发环境
    Android全屏 去除标题栏和状态栏
    服务器日志现 Android 4.2 传将添多项新特性
    Percona XtraBackup 2.0.3 发布
    长平狐 Android 强制设置横屏或竖屏 设置全屏
    NetBeans 7.3 Beta 发布,全新的 HTML5 支持
    CppDepend现在已经支持Linux
    GromJS 1.7.18 发布,服务器端的 JavaScript
    Apache OpenWebBeans 1.1.6 发布
  • 原文地址:https://www.cnblogs.com/step-by-step1/p/4583971.html
Copyright © 2020-2023  润新知