文档章节

java利用ftpClient来创建多层目录文件

啊哈关关
 啊哈关关
发布于 2017/02/28 09:47
字数 454
阅读 1349
收藏 0
//改变目录路径
 public boolean changeWorkingDirectory(String directory) {
        boolean flag = true;
        try {
            flag = ftpClient.changeWorkingDirectory(directory);
            if (flag) {
                logger.debug("进入文件夹" + directory + " 成功!");

            } else {
                logger.debug("进入文件夹" + directory + " 失败!");
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return flag;
    }


//创建目录
    public boolean makeDirectory(String dir) {
        boolean flag = true;
        try {
            flag = ftpClient.makeDirectory(dir);
            if (flag) {
                logger.debug("创建文件夹" + dir + " 成功!");

            } else {
                logger.debug("创建文件夹" + dir + " 失败!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }


//创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建
    public boolean CreateDirecroty(String remote) throws IOException {
        boolean success = true;
        String directory = remote + "/";
//        String directory = remote.substring(0, remote.lastIndexOf("/") + 1);
        // 如果远程目录不存在,则递归创建远程服务器目录
        if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(new String(directory))) {
            int start = 0;
            int end = 0;
            if (directory.startsWith("/")) {
                start = 1;
            } else {
                start = 0;
            }
            end = directory.indexOf("/", start);
            String path = "";
            String paths = "";
            while (true) {

                String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1");
                path = path + "/" + subDirectory;
                if (!existFile(path)) {
                    if (makeDirectory(subDirectory)) {
                        changeWorkingDirectory(subDirectory);
                    } else {
                        logger.debug("创建目录[" + subDirectory + "]失败");
                         changeWorkingDirectory(subDirectory);
                    }
                } else {
                    changeWorkingDirectory(subDirectory);
                }

                paths = paths + "/" + subDirectory;
                start = end + 1;
                end = directory.indexOf("/", start);
                // 检查所有目录是否创建完毕
                if (end <= start) {
                    break;
                }
            }
        }
        return success;
    }





//判断ftp服务器文件是否存在    
public boolean existFile(String path) throws IOException {
        boolean flag = false;
        FTPFile[] ftpFileArr = ftpClient.listFiles(path);
        if (ftpFileArr.length > 0) {
            flag = true;
        }
        return flag;
    }


//上传单个文件
    public boolean uploadFile(File localFile, String remoteFile)
            throws IOException {
        boolean flag = false;
        InputStream in = new FileInputStream(localFile);
        String remote = new String(remoteFile.getBytes("GBK"), "iso-8859-1");
        try {
            if (ftpClient.storeFile(remote, in)) {
                flag = true;
                logger.debug(localFile.getAbsolutePath() + "上传文件成功!");
            } else {
                logger.debug(localFile.getAbsolutePath() + "上传文件失败!");
            }
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return flag;
    }


//利用递归上传多个多目录文件
    public boolean uploadFiles(String localPathFileName, String remotePathFileName) throws IOException {
        //
        File local = new File(localPathFileName);

        if (local.isDirectory()) {
            try {
                this.ftpClient.changeWorkingDirectory("/");
                CreateDirecroty(remotePathFileName);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            File local1 = new File(localPathFileName);
            uploadFile(local1, remotePathFileName);
        }
        File sourceFile[] = local.listFiles();
        for (int i = 0; i < sourceFile.length; i++) {
            if (sourceFile[i].exists()) {
                String path = sourceFile[i].getAbsolutePath().substring(localPathFileName.length());
                if (sourceFile[i].isDirectory()) {
                    this.uploadFiles(sourceFile[i].getAbsolutePath(), remotePathFileName + path);
                } else {
                    if (!path.equals("/.DS_Store")) {
                        File file2 = new File(sourceFile[i].getAbsolutePath());
                        uploadFile(file2, remotePathFileName + path);
                    }
                }
            }
        }
        return true;
    }

© 著作权归作者所有

共有 人打赏支持
啊哈关关
粉丝 7
博文 155
码字总数 72670
作品 0
深圳
程序员
Apache commons ftp API 的Spike

由于公司给了我一个传FTP的任务,刚好可以学习一下,同时也进行了一些单元测试,spike了一把,哈哈。分享一下。 这里只对最简单常用的FtpClient的上传下载列表功能进行测试学习使用^-^ 创建一...

XzhiF
2013/12/13
0
9
org.apache.commons.net.ftp包开发FTP客户端,实现断点续传,中文支持

利用org.apache.commons.net.ftp包实现一个简单的ftp客户端实用类。主要实现一下功能 1.支持上传下载。支持断点续传 2.支持进度汇报 3.支持对于中文目录及中文文件创建的支持。 具体请看代码...

御风林海
2013/11/29
0
0
使用Java连接FTP服务器进行下载和上传

先说一下如何在eclipse里使用sun.net的包的方法 sun.net包里的,在eclipse里默认是不让用的。解决办法是自定义access rules 在工程上右键->工程属性->java builder path->Libraries标签,点击...

黄梦巍
2012/12/21
0
0
关于class文件编译成exe

辣妹备注:今天收到cqq(就那个用java破解天意后台系统那个老兄)的来信,可惜他编译好的是个class文件. 我对编程一窍不通,搜索了下看怎么编译成exe文件. 于是发现了本文.其实,下面那个老...

王大叔爱编程
2013/09/12
0
0
什么是J2EE、Java SE、Java EE、Java ME?

目前,Java 2平台有3个版本,它们是适用于小型设备和智能卡的Java 2平台Micro版(Java 2 Platform Micro Edition,J2ME)、适用于桌面系统的Java 2平台标准版(Java 2 Platform Standard Ed...

Midnight
2010/12/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Laravel UNION联合查询并分页

$xk = DB::table('xiaokes')->select(['id','xk_name as name','xk_teacher_id as tid','ke_type','created_at']) ->where('xk_teacher_id',$id); $query = DB::......

一只懒猫-
31分钟前
1
0
187 修改centos的密码

先登录

Lucky_Me
38分钟前
3
0
通过Timer类实现App 启动页停留三秒效果

Timer timer = new Timer(); //参数1:每次执行的任务代码 参数2:延时多少毫秒执行 参数3:任务间隔 单位:毫秒 timer.schedule(new TimerTask() { @Over...

lanyu96
44分钟前
0
0
pip更改下载源设置

任何一个信息都可以把人分为两类,知道的和不知道的。有些我们已知的信息,自己觉得很平常,却可能对另一些不知道的人来说很有用处。 比如今天要说的这个小技巧,我自己原以为不值一提,网上...

crossin
44分钟前
1
0
css预加载

css /* 预加载图片,挂在body上 */.preload-img:after{ content:""; background: url(../images/new/full_bg2.jpg) no-repeat -10000px -1000px;} js $(function(){ /......

红羊在厦门
52分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部