//下载ftp指定文件夹下所有文件 public void downLoadAll(String ftpPath, String localPath) { FTPClient ftpClient = new FTPClient(); try { ftpPath = separatorHandle(ftpPath); localPath = separatorHandle(localPath); createPath(localPath); ftpClient.setConnectTimeout(90000); ftpClient.connect(ftpIp, ftpPort); ftpClient.enterLocalPassiveMode(); if (ftpClient.login(ftpName, ftpPassword)) { downFileOrDir(ftpPath, localPath, ftpClient); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (ftpClient.isConnected()) { ftpClient.logout(); ftpClient.disconnect(); } } catch (Exception e) { } } } /** * FTP下载目录结构并且包括目录内文件 */ private void downFileOrDir(String ftpPath, String localPath, FTPClient ftpClient) throws Exception { File temp = new File(localPath); Date date = new Date(); String now = DateUtils.formatDate(date, "yyyy-MM-dd"); if (!temp.exists()) { temp.mkdirs(); } FTPFile[] allFile = ftpClient.listFiles(ftpPath); for (int i = 0; i < allFile.length; i++) { File localfile = new File(localPath + File.separator + allFile[i].getName()); if (!localfile.exists()) { localfile.mkdirs();// 创建文件夹 FTPFile[] ftpfiles = ftpClient.listFiles(ftpPath + allFile[i].getName(), new MyFTPFileFilter("csv", "")); if (ftpfiles != null && ftpfiles.length > 0) { for (FTPFile ftpFile : ftpfiles) { downloadingFile(ftpClient, localPath + File.separator + allFile[i].getName() + File.separator + ftpFile.getName(), ftpPath + allFile[i].getName() + File.separator + ftpFile.getName()); ftpClient.changeWorkingDirectory(ftpPath + allFile[i].getName()); ftpClient.dele(ftpFile.getName()); } } else { logger.info(ftpPath + ": no match file"); } } // 如果文件夹名称和当前日期相同则不删除 if (!now.equals(allFile[i].getName())) { ftpClient.changeWorkingDirectory(ftpPath); ftpClient.removeDirectory(allFile[i].getName()); } } } private void downloadingFile(FTPClient ftpClient, String localFile, String remoteFile) throws Exception { File file = new File(localFile); if (file.exists()) { file.delete(); } FileOutputStream fos = null; try { ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); fos = new FileOutputStream(localFile); ftpClient.retrieveFile(remoteFile, fos); fos.flush(); } catch (Exception e) { throw e; } finally { if (fos != null) { fos.close(); } } }//上传ftp指定文件夹下所有文件 public void upLoadAll(String localPath, String ftpPath) { FTPClient ftpClient = new FTPClient(); try { ftpPath = separatorHandle(ftpPath); localPath = separatorHandle(localPath); createPath(localPath); ftpClient.setConnectTimeout(90000); ftpClient.connect(ftpIp, ftpPort); ftpClient.enterLocalPassiveMode(); if (ftpClient.login(ftpName, ftpPassword)) { uploadFileOrDir(localPath, ftpPath, ftpClient); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (ftpClient.isConnected()) { ftpClient.logout(); ftpClient.disconnect(); } } catch (Exception e) { } } }/** * 上传ftp并删除本地文件 */ public void uploadFileOrDir(String localPath, String addatasync, FTPClient ftpClient) throws Exception { // 上传文件 addatasync = separatorHandle(addatasync); localPath = separatorHandle(localPath); File directory = new File(localPath); File[] files = directory.listFiles(); if (files != null && files.length > 0) { for (File file : files) { String filename = file.getName(); ftpClient.changeWorkingDirectory(addatasync); ftpClient.makeDirectory(filename); File seDirectory = new File(localPath + filename); File[] seFiles = seDirectory.listFiles(); for (File seFile : seFiles) { ftpClient.changeWorkingDirectory(addatasync + filename); uploadingFile(separatorHandle(addatasync + filename) + seFile.getName(), separatorHandle(localPath + filename )+ seFile.getName(),ftpClient); } } } // 删除临时所有文件 deleteDir(directory); File temp = new File(localPath); if (!temp.exists()) { temp.mkdirs(); } } private void deleteDir(File dir) { if (dir.isDirectory()) { String[] children = dir.list(); // 递归删除目录中的子目录下 for (int i = 0; i < children.length; i++) { deleteDir(new File(dir, children[i])); } } dir.delete(); } private void uploadingFile(String remoteFile, String localfile, FTPClient ftpClient) throws Exception { FileInputStream fis = null; try { // 设置PassiveMode传输 ftpClient.enterLocalPassiveMode(); // 设置以二进制流的方式传输 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.deleteFile(remoteFile); ftpClient.mdtm(remoteFile); ftpClient.setControlEncoding("UTF-8"); fis = new FileInputStream(localfile); ftpClient.storeFile(remoteFile, fis); } catch (Exception e) { throw e; } finally { if (fis != null) { fis.close(); } } } public String separatorHandle(String str) { if (!str.endsWith("/")) { str = str + "/"; } return str; }