博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java实现ftp文件的上传与下载
阅读量:7123 次
发布时间:2019-06-28

本文共 7532 字,大约阅读时间需要 25 分钟。

最近在做ftp文件的上传与下载,基于此,整理了一下资料。本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的。。。

1.首先引用3个包

 

2.然后是相关类的代码

/** * ftp链接常量 * */public class Ftp {    private String ipAddr;//ip地址        private Integer port;//端口号        private String userName;//用户名        private String pwd;//密码        private String path;//aaa路径    public String getIpAddr() {        return ipAddr;    }    public void setIpAddr(String ipAddr) {        this.ipAddr = ipAddr;    }    public Integer getPort() {        return port;    }    public void setPort(Integer port) {        this.port = port;    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public String getPwd() {        return pwd;    }    public void setPwd(String pwd) {        this.pwd = pwd;    }    public String getPath() {        return path;    }    public void setPath(String path) {        this.path = path;    }        }
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPFile;import org.apache.commons.net.ftp.FTPReply;import org.apache.log4j.Logger;public class FtpUtil {        private static Logger logger=Logger.getLogger(FtpUtil.class);        private static FTPClient ftp;        /**     * 获取ftp连接     * @param f     * @return     * @throws Exception     */    public static boolean connectFtp(Ftp f) throws Exception{        ftp=new FTPClient();        boolean flag=false;        int reply;        if (f.getPort()==null) {            ftp.connect(f.getIpAddr(),21);        }else{            ftp.connect(f.getIpAddr(),f.getPort());        }        ftp.login(f.getUserName(), f.getPwd());        ftp.setFileType(FTPClient.BINARY_FILE_TYPE);        reply = ftp.getReplyCode();              if (!FTPReply.isPositiveCompletion(reply)) {                    ftp.disconnect();                    return flag;              }              ftp.changeWorkingDirectory(f.getPath());              flag = true;              return flag;    }        /**     * 关闭ftp连接     */    public static void closeFtp(){        if (ftp!=null && ftp.isConnected()) {            try {                ftp.logout();                ftp.disconnect();            } catch (IOException e) {                e.printStackTrace();            }        }    }        /**     * ftp上传文件     * @param f     * @throws Exception     */    public static void upload(File f) throws Exception{        if (f.isDirectory()) {            ftp.makeDirectory(f.getName());            ftp.changeWorkingDirectory(f.getName());            String[] files=f.list();            for(String fstr : files){                File file1=new File(f.getPath()+"/"+fstr);                if (file1.isDirectory()) {                    upload(file1);                    ftp.changeToParentDirectory();                }else{                    File file2=new File(f.getPath()+"/"+fstr);                    FileInputStream input=new FileInputStream(file2);                    ftp.storeFile(file2.getName(),input);                    input.close();                }            }        }else{            File file2=new File(f.getPath());            FileInputStream input=new FileInputStream(file2);            ftp.storeFile(file2.getName(),input);            input.close();        }    }        /**     * 下载链接配置     * @param f     * @param localBaseDir 本地目录     * @param remoteBaseDir 远程目录     * @throws Exception     */    public static void startDown(Ftp f,String localBaseDir,String remoteBaseDir ) throws Exception{        if (FtpUtil.connectFtp(f)) {                        try {                 FTPFile[] files = null;                 boolean changedir = ftp.changeWorkingDirectory(remoteBaseDir);                 if (changedir) {                     ftp.setControlEncoding("GBK");                     files = ftp.listFiles();                     for (int i = 0; i < files.length; i++) {                         try{                             downloadFile(files[i], localBaseDir, remoteBaseDir);                         }catch(Exception e){                             logger.error(e);                             logger.error("<"+files[i].getName()+">下载失败");                         }                     }                 }             } catch (Exception e) {                 logger.error(e);                 logger.error("下载过程中出现异常");             }         }else{            logger.error("链接失败!");        }            }            /**      *      * 下载FTP文件      * 当你需要下载FTP文件的时候,调用此方法      * 根据获取的文件名,本地地址,远程地址进行下载      *      * @param ftpFile      * @param relativeLocalPath      * @param relativeRemotePath      */     private  static void downloadFile(FTPFile ftpFile, String relativeLocalPath,String relativeRemotePath) {         if (ftpFile.isFile()) {            if (ftpFile.getName().indexOf("?") == -1) {                 OutputStream outputStream = null;                 try {                     File locaFile= new File(relativeLocalPath+ ftpFile.getName());                     //判断文件是否存在,存在则返回                     if(locaFile.exists()){                         return;                     }else{                         outputStream = new FileOutputStream(relativeLocalPath+ ftpFile.getName());                         ftp.retrieveFile(ftpFile.getName(), outputStream);                         outputStream.flush();                         outputStream.close();                     }                 } catch (Exception e) {                     logger.error(e);                } finally {                     try {                         if (outputStream != null){                             outputStream.close();                         }                    } catch (IOException e) {                        logger.error("输出文件流异常");                     }                 }             }         } else {             String newlocalRelatePath = relativeLocalPath + ftpFile.getName();             String newRemote = new String(relativeRemotePath+ ftpFile.getName().toString());             File fl = new File(newlocalRelatePath);             if (!fl.exists()) {                 fl.mkdirs();             }             try {                 newlocalRelatePath = newlocalRelatePath + '/';                 newRemote = newRemote + "/";                 String currentWorkDir = ftpFile.getName().toString();                 boolean changedir = ftp.changeWorkingDirectory(currentWorkDir);                 if (changedir) {                     FTPFile[] files = null;                     files = ftp.listFiles();                     for (int i = 0; i < files.length; i++) {                         downloadFile(files[i], newlocalRelatePath, newRemote);                     }                 }                 if (changedir){                    ftp.changeToParentDirectory();                 }             } catch (Exception e) {                 logger.error(e);            }         }     }         public static void main(String[] args) throws Exception{              Ftp f=new Ftp();            f.setIpAddr("1111");            f.setUserName("root");            f.setPwd("111111");            FtpUtil.connectFtp(f);            File file = new File("F:/test/com/test/Testng.java");              FtpUtil.upload(file);//把文件上传在ftp上            FtpUtil.startDown(f, "e:/",  "/xxtest");//下载ftp文件测试            System.out.println("ok");                 }      }

以上代码均测试通过了。。。

 

 

 

 

 

项目及相关包下载:

转载地址:http://gyael.baihongyu.com/

你可能感兴趣的文章
Linux vmstat命令实战详解
查看>>
zip压缩工具、tar打包、打包并压缩
查看>>
PHP日期转星期(英文/数字)
查看>>
python 逻辑运算符
查看>>
Hibernate技术
查看>>
js实现限制输入框只能输入数字
查看>>
CentOS下杀毒工具ClamAV安装
查看>>
编译参数查看
查看>>
httpd学习:http基础
查看>>
硬盘结构与工作原理
查看>>
改动过.gitignore文件之后设置生效
查看>>
LAMP编译安装1
查看>>
Does GATHER_STATS_JOB gather all objects' stats every time?
查看>>
Oracle绑定变量窥探
查看>>
BPDU guard和bpdufilter的一些介绍
查看>>
批量删除文件
查看>>
DNS服务器的学习和搭建
查看>>
C++语言笔记C11库
查看>>
systemd及启动流程
查看>>
java转换ppt,ppt转成图片,获取备注,获取文本
查看>>