博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ftp 下载和上传 指定文件夹内所有文件(包括文件夹,并且文件夹目录不变)...
阅读量:6036 次
发布时间:2019-06-20

本文共 4926 字,大约阅读时间需要 16 分钟。

hot3.png

//下载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;	}

 

转载于:https://my.oschina.net/jianzheng/blog/1794980

你可能感兴趣的文章
nginx的location root 指令
查看>>
zDiaLog弹出层
查看>>
linux不常用但很有用的命令(持续完善)
查看>>
NFine常见错误
查看>>
zabbix报警媒介------>微信报警
查看>>
使用视图的好处
查看>>
面向开发运维的10款开源工具
查看>>
MVC ---- 增删改成 EF6
查看>>
linux 下 php 安装 pthreads
查看>>
Spring Boot学习笔记
查看>>
python3存入redis是bytes
查看>>
laravel 集合接口
查看>>
C/C++二进制读写png文件
查看>>
thymleaf 常用th 标签
查看>>
RTB 广告系统
查看>>
Linux signal 那些事儿(2)【转】
查看>>
InfluxDB安装及配置
查看>>
Dynamics CRM Microsoft SQL Server 指定的数据库具有更高的版本号
查看>>
PAT Perfect Sequence (25)
查看>>
java.exe进程来源排查录
查看>>