Java 从FTP下载.上传文件详解编程语言

1.需要导入pom

<dependency> 
  <groupId>commons-net</groupId> 
   <artifactId>commons-net</artifactId> 
   <version>3.1</version> 
</dependency>

2.FTP工具类(Ftp IP 端口 用户名 密码都配置在配置文件)

package com.tools.ftp; 
import org.apache.commons.net.ftp.FTP; 
import org.apache.commons.net.ftp.FTPClient; 
import org.apache.commons.net.ftp.FTPReply; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.stereotype.Component; 
import java.io.*; 
import java.net.SocketException; 
/** 
* @author admin 
* @title: FtpUtils 
* @projectName tools 
* @description: FTP工具类 
* @date 2020/3/1913:23 
*/ 
@Component 
public class FtpUtils { 
/**FTP IP*/ 
@Value("${ftp.host}") 
private String ftpHost; 
/**FTP用户名*/ 
@Value("${ftp.userName}") 
private String ftpUserName; 
/**FTP密码*/ 
@Value("${ftp.password}") 
private String ftpPassword; 
/**FTP 端口 默认21*/ 
@Value("${ftp.port}") 
private int ftpPort =21; 
public static final String CHARSET_GBK = "GBK"; 
public static final String CHARSET_UTF8 = "UTF-8"; 
public static final String CHARSET_ISO = "iso-8859-1"; 
/** 
* 获取FTPClient 
* @return 
*/ 
public  FTPClient getFTPClient() { 
FTPClient ftpClient = new FTPClient(); 
try { 
ftpClient = new FTPClient(); 
// 连接FTP服务器 
            ftpClient.connect(ftpHost, ftpPort); 
// 登陆FTP服务器 
            ftpClient.login(ftpUserName, ftpPassword); 
if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { 
System.out.println("未连接到FTP,用户名或密码错误。"); 
ftpClient.disconnect(); 
} else { 
System.out.println("FTP连接成功。"); 
} 
} catch (SocketException e) { 
e.printStackTrace(); 
System.out.println("FTP的IP地址可能错误,请正确配置。"); 
} catch (IOException e) { 
e.printStackTrace(); 
System.out.println("FTP的端口错误,请正确配置。"); 
} 
return ftpClient; 
} 
/** 
* 下载文件 
* @param ftpPath  ftp文件存放物理路径 
* @param fileName 文件路径 
*/ 
public  void downloadFile(String ftpPath, String localPath, String fileName) { 
FTPClient ftpClient = null; 
try { 
ftpClient = getFTPClient(); 
// 中文支持 
            ftpClient.setControlEncoding(CHARSET_UTF8); 
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); 
ftpClient.enterLocalPassiveMode(); 
ftpClient.changeWorkingDirectory(ftpPath); 
File localFile = new File(localPath + File.separatorChar + fileName); 
OutputStream os = new FileOutputStream(localFile); 
ftpClient.retrieveFile(fileName, os); 
os.close(); 
ftpClient.logout(); 
} catch (FileNotFoundException e) { 
System.out.println("没有找到" + ftpPath + "文件"); 
e.printStackTrace(); 
} catch (SocketException e) { 
System.out.println("连接FTP失败."); 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
System.out.println("文件读取错误。"); 
e.printStackTrace(); 
} 
} 
/** 
* 上传文件 
* @param ftpPath  ftp文件存放物理路径 
* @param fileName 文件路径 
* @param input 文件输入流,即从本地服务器读取文件的IO输入流 
*/ 
public  void uploadFile(String ftpPath,String fileName,InputStream input){ 
FTPClient ftp=null; 
try { 
ftp=getFTPClient(); 
ftp.changeWorkingDirectory(ftpPath); 
ftp.setFileType(FTP.BINARY_FILE_TYPE); 
fileName=new String(fileName.getBytes(CHARSET_GBK),CHARSET_ISO); 
ftp.storeFile(fileName, input); 
input.close(); 
ftp.logout(); 
System.out.println("upload succes!"); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
} 
public String getFtpHost() { 
return ftpHost; 
} 
public void setFtpHost(String ftpHost) { 
this.ftpHost = ftpHost; 
} 
public String getFtpUserName() { 
return ftpUserName; 
} 
public void setFtpUserName(String ftpUserName) { 
this.ftpUserName = ftpUserName; 
} 
public String getFtpPassword() { 
return ftpPassword; 
} 
public void setFtpPassword(String ftpPassword) { 
this.ftpPassword = ftpPassword; 
} 
public int getFtpPort() { 
return ftpPort; 
} 
public void setFtpPort(int ftpPort) { 
this.ftpPort = ftpPort; 
} 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/18521.html

(0)
上一篇 2021年7月19日 21:13
下一篇 2021年7月19日 21:13

相关推荐

发表回复

登录后才能评论