当前位置 博文首页 > ftpclient创建目录,Java创建多级目录并上传文件

    ftpclient创建目录,Java创建多级目录并上传文件

    作者:xiaoyu 时间:2021-07-12 13:47

        要实现需求总共分为三步:
        a. 建立连接;
        b. 递归目录,并创建;
        c. 上传;

        //改变目录路径
     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;
        }