Java怎么实现FTP的上传与下载功能
发表于:2024-10-21 作者:千家信息网编辑
千家信息网最后更新 2024年10月21日,这篇文章主要讲解了"Java怎么实现FTP的上传与下载功能",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java怎么实现FTP的上传与下载功能"吧!J
千家信息网最后更新 2024年10月21日Java怎么实现FTP的上传与下载功能
这篇文章主要讲解了"Java怎么实现FTP的上传与下载功能",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java怎么实现FTP的上传与下载功能"吧!
JAVA操作FTP服务器,只需要创建一个FTPClient即可,所有的操作都封装在FTPClient中,JDK自带的有FTPClient(sun.net.ftp.FtpClient),也可以用第三方的FTPClient,一般使用apache的FTPClient(org.apache.commons.net.ftp.FTPClient),本文将使用apache的FTPClient,API都大同小异
关键依赖:commons-net
对常用操作(上传、下载)封装成工具类
package com.day0322;import org.apache.commons.io.IOUtils;import org.apache.commons.lang3.StringUtils;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPReply;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;/** * FTP工具类 * 文件上传 * 文件下载 */public class FTPUtil { private static final Logger log = LoggerFactory.getLogger(FTPUtil.class); /** * 设置缓冲区大小4M **/ private static final int BUFFER_SIZE = 1024 * 1024 * 4; /** * 本地字符编码 **/ private static String LOCAL_CHARSET = "GBK"; /** * UTF-8字符编码 **/ private static final String CHARSET_UTF8 = "UTF-8"; /** * OPTS UTF8字符串常量 **/ private static final String OPTS_UTF8 = "OPTS UTF8"; /** * FTP协议里面,规定文件名编码为iso-8859-1 **/ private static final String SERVER_CHARSET = "ISO-8859-1"; private static FTPClient ftpClient = null; /** * 连接FTP服务器 */ private static void login(OaFtp oaFtp) { ftpClient = new FTPClient(); try { ftpClient.connect(oaFtp.getIp(), Integer.valueOf(oaFtp.getPort())); ftpClient.login(oaFtp.getName(), oaFtp.getPwd()); ftpClient.setBufferSize(BUFFER_SIZE); ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); int reply = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { closeConnect(); } } catch (Exception e) { log.error("",e); throw new RuntimeException(e); } } /** * 关闭FTP连接 */ private static void closeConnect() { if (ftpClient != null && ftpClient.isConnected()) { try { ftpClient.logout(); ftpClient.disconnect(); } catch (IOException e) { log.error("",e); } } } /** * FTP服务器路径编码转换 * * @param ftpPath FTP服务器路径 * @return String */ private static String changeEncoding(String ftpPath) { String directory = null; try { if (FTPReply.isPositiveCompletion(ftpClient.sendCommand(OPTS_UTF8, "ON"))) { LOCAL_CHARSET = CHARSET_UTF8; } directory = new String(ftpPath.getBytes(LOCAL_CHARSET), SERVER_CHARSET); } catch (Exception e) { log.error("",e); } return directory; } /** * 改变工作目录 * 如果没有,则创建工作目录 * @param path */ private static void changeAndMakeWorkingDir(String path) { try { ftpClient.changeWorkingDirectory("/"); path = path.replaceAll("\\\\","/"); String[] path_array = path.split("/"); for (String s : path_array) { boolean b = ftpClient.changeWorkingDirectory(s); if (!b) { ftpClient.makeDirectory(s); ftpClient.changeWorkingDirectory(s); } } } catch (IOException e) { log.error("",e); throw new RuntimeException(e); } } /** * 上传 * @param oaFtp * @param filename * @param dirPath * @param in * @return */ public static boolean upload (OaFtp oaFtp, String filename, String dirPath, InputStream in) { login(oaFtp); if (!ftpClient.isConnected()) { return false; } boolean isSuccess = false; if (ftpClient != null) { try { if (FTPReply.isPositiveCompletion(ftpClient.sendCommand(OPTS_UTF8, "ON"))) { LOCAL_CHARSET = CHARSET_UTF8; } ftpClient.setControlEncoding(LOCAL_CHARSET); String path = changeEncoding(dirPath); changeAndMakeWorkingDir(path); isSuccess = ftpClient.storeFile(new String(filename.getBytes(), SERVER_CHARSET), in); } catch (Exception e) { log.error("",e); } finally { closeConnect(); } } return isSuccess; } /** * 下载 * @param oaFtp * @param filename * @param dirPath * @param out * @return */ public static void download (OaFtp oaFtp, String filename, String dirPath, FileOutputStream out) { // 登录 login(oaFtp); if (ftpClient != null) { try { String path = changeEncoding(dirPath); changeAndMakeWorkingDir(path); String[] fileNames = ftpClient.listNames(); if (fileNames == null || fileNames.length == 0) { return; } for (String fileName : fileNames) { String ftpName = new String(fileName.getBytes(SERVER_CHARSET), LOCAL_CHARSET); if (StringUtils.equals(ftpName,filename)) { InputStream in = ftpClient.retrieveFileStream(fileName); IOUtils.copy(in,out); } } } catch (IOException e) { log.error("",e); } finally { closeConnect(); } } }}
测试
1.上传
2.下载
感谢各位的阅读,以上就是"Java怎么实现FTP的上传与下载功能"的内容了,经过本文的学习后,相信大家对Java怎么实现FTP的上传与下载功能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
功能
服务器
编码
服务
字符
文件
学习
内容
工具
目录
路径
UTF-8
封装
工作
大同小异
关键
大小
字符串
就是
常用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海ar软件开发报价
评析网络安全和信息化工作
富士康南京软件开发岗怎么样
浪潮服务器进管理界面
天津个人软件开发多少钱
a5 数据库工具
2台服务器如何实现并行计算
计算机等级网络技术考设么
数据库plsql乱码
pppoe服务器映射到公网
第三方软件开发包sdk概念
月老难牵姻缘打一网络技术
中国5g网络技术的新闻
软件开发周期文档
数据库数据模型答案
平行线教育软件开发部
提高网络安全意识谨防钓鱼邮件
j2ee用什么数据库
网络安全与保密期末题库
如何做好软件开发服务
赣榆县麦田网络技术
今年是第几节网络安全日
瑞合软件开发
嘉兴车载网络技术口碑推荐
比对两个表相同的数据库
网吧服务器选什么配置
数据库可视化分析技术
福建网络安全审计硬件提供商
一本通三级网络技术
邮箱服务器拒收