十年JAVA搬砖路——FTP服务器下载文件
简单叙述
FTP协议和HTTP协议是两种不同的网络协议,它们在功能和用途上有一些区别。
- 功能:FTP协议主要用于文件传输,允许用户在客户端和服务器之间上传、下载和管理文件。HTTP协议则用于在Web浏览器和Web服务器之间传输超文本文档,即用于浏览网页和获取网页内容。
- 端口:FTP协议使用默认的端口号21进行通信,而HTTP协议使用默认的端口号80。
- 连接方式:FTP协议使用两个独立的连接,一个用于控制命令,另一个用于数据传输。HTTP协议使用单个连接进行通信。
- 认证方式:FTP协议支持多种身份验证方式,包括用户名和密码、匿名登录等。HTTP协议通常使用基本身份验证或表单身份验证。
- 数据传输方式:FTP协议支持两种数据传输模式,即主动模式和被动模式。HTTP协议使用请求-响应模式进行数据传输。
总的来说,FTP协议更适合用于文件传输和管理,而HTTP协议更适合用于浏览网页和获取网页内容。
Maven依赖
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
</dependency>
Demo类
@Slf4j
publicclassFTPUtils{
@Data
privateclassFtpConfig{
privatefinalStringserver="127.0.0.1";
privatefinalIntegerport=2121;
privatefinalStringusername="admin";
privatefinalStringpassword="123456@2022";
}
/**
*创建FTP链接
*
*@return
*/
privatesynchronizedFTPClientgetFtpClient(){
try{
FTPClientftpClient=newFTPSClient();
FtpConfigftpConfig=newFtpConfig();
ftpClient.connect(ftpConfig.getServer(),ftpConfig.getPort());
ftpClient.login(ftpConfig.getUsername(),ftpConfig.getPassword());
ftpClient.setControlEncoding("GBK");
if(FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){
returnftpClient;
}else{
log.error("FTPserverconnecterror.code={},message={}",ftpClient.getReplyCode(),ftpClient.getReplyString());
}
returnftpClient;
}catch(IOExceptione){
thrownewRuntimeException(e);
}
}
/**
*循环遍历全部文件
*/
privatevoidtraverseDirectories(FTPClientftpClient,StringparentDir)throwsIOException{
FTPFile[]files=ftpClient.listFiles(parentDir);
for(FTPFilefile:files){
StringcurrentFileName=file.getName();
StringcurrentFilePath=parentDir+"/"+currentFileName;
if(file.isDirectory()){
traverseDirectories(ftpClient,currentFilePath);
}else{
System.out.println(currentFileName);
}
}
}
/**
*单个文件下载
*/
privatevoidsingDownLoad()throwsIOException{
FTPClientftpClient=getFtpClient();
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
Filefile=newFile("/");
FileOutputStreamoutputStream=newFileOutputStream(file);
ftpClient.retrieveFile("/ody_backup/FTP_Backup/data/testing3/CP/EPH8611-M2/C2000-1_D408A_V1P11_8site_CP1_WBISK1QP-13_230621_1329.std.gz",outputStream);
ftpClient.logout();
ftpClient.disconnect();
}
publicstaticvoidmain(String[]args){
FTPUtilsftpUtils=newFTPUtils();
FTPClientftpClient=ftpUtils.getFtpClient();
try{
ftpUtils.traverseDirectories(ftpClient,"/ody_backup/FTP_Backup/data/testing6");
ftpUtils.singDownLoad();
}catch(IOExceptione){
thrownewRuntimeException(e);
}
}
}