zoukankan      html  css  js  c++  java
  • java实现FTP下载文件

    ftp上传下载文件,是遵照ftp协议上传下载文件的,本例仅以下载文件为例。

    重要的方法解释:

    1.FTP功能相关依赖路径:org.apache.commons.net.ftp.*;

    2.ftp默认端口是21,如果非默认端口连接,需指定:ftp.connect(ftphostaddr, 22);//22为端口号

    3.ftp.changeWorkingDirectory(ftppath) //实现切换目录

    4.FTPFile[] fs = ftp.listFiles(); 获取指定目录下的文件列表

    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;
    	 }
    }
    

      

  • 相关阅读:
    socket套接字
    popen:让进程看似文件
    fdopen:让文件描述符像文件一样使用
    计算机"右击"管理,不出现界面,解决方案
    javaEE版本的eclipse中导入工程,发现server里面找不到工程,根本发布不了也不能运行
    初识springMVC
    数据库系统
    Red hat 下nfs服务器的搭建
    Linux下MySQL安装和配置
    复习Hibernate(1)
  • 原文地址:https://www.cnblogs.com/renjie0520/p/5714279.html
Copyright © 2011-2022 走看看