Copy all directories to server by FTP using Java

前端 未结 2 1662
故里飘歌
故里飘歌 2021-02-06 10:23

I need to copy a directory from the local disk to a server. The directory contains a lot of directories, subdirectories, and files. (Think of a hierarchy tree of directories).<

2条回答
  •  野趣味
    野趣味 (楼主)
    2021-02-06 10:55

    The following is an example of a recursive solution to the problem:

    public void saveFilesToServer(String remoteDest, File localSrc) throws IOException {
        FTPClient ftp = new FTPClient();
        ftp.connect("ftp.foobar.com");
        if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
            ftp.disconnect();
            log.fatal("FTP not disconnected");
        }
    
        ftp.login("foo", "qwerty");
        log.info("Connected to server .");
        log.info(ftp.getReplyString());
    
        ftp.changeWorkingDirectory(remoteDest);
        ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
    
        try {
            upload(localSrc, ftp);
        }
        finally {
            ftp.disconnect();
            log.info("FTP disconnected");           
        }
    }
    
    public void upload(File src, FTPClient ftp) throws IOException {
        if (src.isDirectory()) {
            ftp.makeDirectory(src.getName());
            ftp.changeWorkingDirectory(src.getName());
            for (File file : src.listFiles()) {
                upload(file, ftp);
            }
            ftp.changeToParentDirectory();
        }
        else {
            InputStream srcStream = null;
            try {
                srcStream = src.toURI().toURL().openStream();
                ftp.storeFile(src.getName(), srcStream);
            }
            finally {
                IOUtils.closeQuietly(srcStream);
            }
        }
    }
    

    IOUtils is a part of Apache Commons IO.

提交回复
热议问题