使用Java通过FTP将所有目录复制到服务器

我需要将目录从本地磁盘复制到服务器。 该目录包含许多目录,子目录和文件。 (想想目录的层次结构树)。

以下是复制一个文件的示例:

public void saveFilesToServer() 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("test"); ftp.makeDirectory("somedir"); ftp.changeWorkingDirectory("somedir"); ftp.setFileType(FTPClient.BINARY_FILE_TYPE); java.io.File srcFolder = new java.io.File(folderPath); FileInputStream fis = new FileInputStream(srcFolder); ftp.storeFile (fileName, fis); ftp.disconnect(); log.info("FTP disconnected"); } 

现在,我需要复制一个目录( somedir )与somedir所有子目录和文件。

我认为算法应该使用递归。 有人知道吗?

以下是该问题的递归解决方案的示例:

 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是Apache Commons IO的一部分。

 upload(fileName){ If (filename is not dir){ ftpFile(); return; } listoffiles = get the list of all files in dir for each file : listoffiles { upload(file) } 

}