文档章节

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

啊哈关关
 啊哈关关
发布于 2017/02/28 09:47
字数 454
阅读 1299
收藏 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
博文 152
码字总数 72519
作品 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
JavaEE的核心API与组件

JAVAEE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,下面对JAVAEE中的13种技术规范进行简单的描述(限于篇幅,这里只进行简单的...

明理萝
08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

angular指令监听ng-repeat渲染完成后执行自定义事件方法

今天工作中遇到需要用到ng-repeat遍历渲染完后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己创建自定义指令。 在ng-repeat模板实例内部会暴露出一些特殊属...

孟飞阳
35分钟前
1
0
URLEncoder和URLDecoder

public static void main(String[] args) { String str1 = "https://test1-life.pingan.com/ilifecore/productMall/loading.html?productId=8000000241&channelCode=XCX00001&productCode=00......

鬼才王
45分钟前
2
0
对象及变量的并发访问-第一篇

方法内部的变量为线程安全变量 “非线程安全”问题存在于“共享变量”中,如果是方法内部的私有变量,则不存在“非线程安全”问题,所得结果也就是“线程安全”的。 package chaprer3;/**...

简心
46分钟前
1
0
程序媛眼中的程序猿原来是这样子的!

一直都想写一篇关于描述程序员的文章,但是一直没能开头,一来因为文笔不好,更主要的原因是貌似对程序员既熟悉又不熟悉,很怕写出来的是以偏概全,给大家造成对程序员的既定印象,不过,管他...

Java小铺
今天
1
0
bean标签

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 bean标签 bean标签中的init-method属性,该属性...

凯哥学堂
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部