java中的接口是类吗
290
2022-11-03
Java使用FTP上传文件并模拟接受的方法
0. 导入相关依赖
http://
1. 文件上传代码
@Component
@Slf4j
public class FTPTools {
/**
* 文件上传
* @param hostname 域名地址
* @param port 端口号
* @param username 用户名
* @param password 密码
* @param fileInfo 待上传的文件
* @param uploadPath 待上传到的路径
* @param saveName 预保存的文件名
* @return
*/
public static boolean upload(String hostname,int port,String username,String password,String fileInfo,String uploadPath,String saveName){
boolean flag = false;
FTPClient ftpClient = null;
try {
ftpClient = new FTPClient();
ftpClient.connect(hostname,port);
//每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据
ftpClient.enterLocalPassiveMode();
//设置二进制传输
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.setControlEncoding("UTF-8");
if(ftpClient.login(username,password)){//若连接成功
log.info("成功登录到ftp服务端,开始文件上传");
flag = sendFile(ftpClient,fileInfhttp://o,uploadPath,saveName);
}else{
log.error("登录到ftp服务端失败,请检查用户名和密码");
}
disconnect(ftpClient);
}catch (SocketException e) {
log.error("文件{}上传失败:{}",saveName,e.getMessage());
} catch (IOException e) {
log.error("文件{}上传失败:{}",saveName,e.getMessage());
} finally {
}
return flag;
}
/**
* 文件传输
* @param fileInfo
* @param uploadPath
* @param saveName
* @return
*/
private static boolean sendFile(FTPClient ftpClient, String fileInfo, String uploadPath, String saveName) throws FileNotFoundException,IOException{
boolean flag = false;
try(FileInputStream fileInputStream = new FileInputStream(fileInfo)){
//检查工作目录是否存在
if(ftpClient.changeWorkingDirectory(uploadPath)){
if(ftpClient.listFiles(saveName).length != 0){ //检查文件是否已经存在
boolean deleteFlag = ftpClient.deleteFile(saveName);
log.info(deleteFlag?"文件已存在,直接删除":"存在同名文件且无法删除,请检查权限");
}
flag = ftpClient.storeFile(saveName,fileInputStream);
log.info(flag?"文件上传成功!":"文件上传失败!");
}else{
log.error("找不到要上传的目录");
}
}catch (FileNotFoundException e){
log.error("找不到要上传的文件{}:{}",fileInfo,e.getMessage());
throw e;
}catch (IOException e){
log.error("文件传输异常:{}",e.getMessage());
throw e;
}
return flag;
}
/**
* 断开ftp连接
* @param ftpClient
*/
private static void disconnect(FTPClient ftpClient) {
if (ftpClient.isConnected()){
try{
ftpClient.disconnect();
log.info("ftp连接已关闭,文件上传结束");
}catch (IOException e){
log.error("ftp连接关闭失败:{}",e);
}
}
}
}
2. FTP模拟测试环境搭建
通过FileZilla安装模拟环境:
a. 打开FileZilla的下载中心,下载服务器
b. 选择合适的版本后,直接傻瓜式安装
c. 配置相关数据
相关操作流程如下:
编辑—>用户
用户名和密码粗略设置如下图所示
通过FTP上传到的文件位置可按个人情况进行设置,勾选相关权限
以上配置即可满足测试要求,进一步的东西大家可根据需求自行研究,也欢迎留言交流!
3. 测试代码
//ftp配置信息
String hostname = "127.0.0.1"; //域名地址
int port = 21; //端口号
String username = "lmh"; //用户名
String password = "123456"; //密码
String fileInfo = "E:\\Temporary\\1.file"; //待上传的文件目录
String uploadPath = "/"; //待上传到的路径
String saveName = FTP+ "_" + DateUtil.format(new Date(),"yyyyMMdd"); //预保存的文件名
FTPTools.upload(hostname, port, username, password, fileInfo, uploadPath, saveName);
4. 测试效果
附录1 :Hutool
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关dAvtahamoAPI的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;
Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
就比如
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String date = sdf.format(new Date());
可以通过Hutool简化为
String date = DateUtil.format(new Date(),"yyyyMMdd");
类似的例子很多大家可以自己去官网看,文档清晰明了:https://hutool.cn/docs/#/
附录2:IntelliJ IDEA lombok插件的安装和使用
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~