代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
FTP服务器上的文件上传、下载、删除操作
作者:
宝清
/ 发布于
2017/9/4
/
565
maven工程中加入最新的commons-net包: <!-- ftp上传文件 --> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.5</version> </dependency> FTPUtil.Java: import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import java.io.*; /** * Created by ssl on 2017/8/7. */ public class FTPUtil { /** * 上传文件(可供Action/Controller层使用) * * @param hostname FTP服务器地址 * @param port FTP服务器端口号 * @param username FTP登录帐号 * @param password FTP登录密码 * @param pathname FTP服务器保存目录 * @param fileName 上传到FTP服务器后的文件名称 * @param inputStream 输入文件流 * @return */ public static boolean uploadFile(String hostname, int port, String username, String password, String pathname, String fileName, InputStream inputStream) throws Exception { boolean flag = false; FTPClient ftpClient = new FTPClient(); ftpClient.setControlEncoding("UTF-8"); try { //连接FTP服务器 ftpClient.connect(hostname, port); //登录FTP服务器 ftpClient.login(username, password); //是否成功登录FTP服务器 int replyCode = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(replyCode)) { return flag; } ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.makeDirectory(pathname); ftpClient.changeWorkingDirectory(pathname); ftpClient.storeFile(fileName, inputStream); ftpClient.logout(); flag = true; } catch (Exception e) { throw e; } finally { if (null != inputStream) { inputStream.close(); } if (null != ftpClient) { ftpClient.disconnect(); } } return flag; } /** * 上传文件(可对文件进行重命名) * * @param hostname FTP服务器地址 * @param port FTP服务器端口号 * @param username FTP登录帐号 * @param password FTP登录密码 * @param pathname FTP服务器保存目录 * @param filename 上传到FTP服务器后的文件名称 * @param originfilename 待上传文件的名称(绝对地址) * @return */ public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String filename, String originfilename) throws Exception { boolean flag = false; InputStream inputStream = null; try { inputStream = new FileInputStream(new File(originfilename)); flag = uploadFile(hostname, port, username, password, pathname, filename, inputStream); } catch (Exception e) { throw e; } finally { if (null != inputStream) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return flag; } /** * 上传文件(不可以进行文件的重命名操作) * * @param hostname FTP服务器地址 * @param port FTP服务器端口号 * @param username FTP登录帐号 * @param password FTP登录密码 * @param pathname FTP服务器保存目录 * @param originfilename 待上传文件的名称(绝对地址) * @return */ public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String originfilename) { boolean flag = false; InputStream inputStream = null; try { String fileName = new File(originfilename).getName(); inputStream = new FileInputStream(new File(originfilename)); flag = uploadFile(hostname, port, username, password, pathname, fileName, inputStream); } catch (Exception e) { e.printStackTrace(); } finally { if (null != inputStream) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return flag; } /** * 删除文件 * * @param hostname FTP服务器地址 * @param port FTP服务器端口号 * @param username FTP登录帐号 * @param password FTP登录密码 * @param pathname FTP服务器保存目录 * @param filename 要删除的文件名称 * @return */ public static boolean deleteFile(String hostname, int port, String username, String password, String pathname, String filename) { boolean flag = false; FTPClient ftpClient = new FTPClient(); try { //连接FTP服务器 ftpClient.connect(hostname, port); //登录FTP服务器 ftpClient.login(username, password); //验证FTP服务器是否登录成功 int replyCode = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(replyCode)) { return flag; } //切换FTP目录 ftpClient.changeWorkingDirectory(pathname); ftpClient.dele(filename); ftpClient.logout(); flag = true; } catch (Exception e) { e.printStackTrace(); } finally { if (ftpClient.isConnected()) { try { ftpClient.logout(); } catch (IOException e) { } } } return flag; } /** * 下载文件 * * @param hostname FTP服务器地址 * @param port FTP服务器端口号 * @param username FTP登录帐号 * @param password FTP登录密码 * @param pathname FTP服务器文件目录 * @param filename 文件名称 * @param localpath 下载后的文件路径 * @return */ public static boolean downloadFile(String hostname, int port, String username, String password, String pathname, String filename, String localpath) throws Exception { boolean success = false; OutputStream out = null; InputStream in = null; FTPClient ftp = new FTPClient();//org.apache.commons.net.ftp try { int reply; if (port > -1) { ftp.connect(hostname, port); } else { ftp.connect(hostname);//ftp默认的端口是21 } //很多人写的是用ftp.getReplyCode()给获取连接的返回值,但是这样会导致storeFileStream返回null ftp.login(username, password); ftp.enterLocalActiveMode(); ftp.setFileType(FTPClient.BINARY_FILE_TYPE); reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return success; } //切换目录 此处可以判断,切换失败就说明ftp上面没有这个路径(对路径名进行转码,解决中文乱码问题) boolean flag = ftp.changeWorkingDirectory(new String(pathname.getBytes(), FTP.DEFAULT_CONTROL_ENCODING)); if (!flag) { throw new Exception("目录[" + pathname + "]不存在"); } FTPFile[] fs = ftp.listFiles(); for (int i = 0; i < fs.length; i++) { FTPFile ff = fs[i]; if (!ff.getName().equals(new String(filename.getBytes(), FTP.DEFAULT_CONTROL_ENCODING))) { continue; } String outFileName = ff.getName(); //创建本地的文件时候要把编码格式转回来 //String localFileName = new String(ff.getName().getBytes("ISO-8859-1"), "UTF-8"); File localFile = new File(localpath.concat(File.separator).concat(filename)); out = new FileOutputStream(localFile); in = ftp.retrieveFileStream(outFileName); byte[] byteArray = new byte[4096]; int read = 0; while ((read = in.read(byteArray)) != -1) { out.write(byteArray, 0, read); } //这句很重要 要多次操作这个ftp的流的通道,要等他的每次命令完成 ftp.completePendingCommand(); out.flush(); ftp.logout(); success = true; } } catch (Exception e) { throw e; } finally { if (null != out) out.close(); if (null != in) in.close(); if (ftp.isConnected()) { ftp.disconnect(); } } return success; } }
试试其它关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
宝清
贡献的其它代码
(
78
)
.
Java 获取Linux 的IP地址
.
FTP服务器上的文件上传、下载、删除操作
.
监听IE文档加载完成、弹窗、JS弹窗、页面跳转
.
防盗链
.
Hive 典型的中表内数据除重写法
.
判断一个时间段内有多少个周末
.
生成验证码
.
ServiceHelper-Windows服务辅助类
.
IE 6下修复PNG格式的透明度
.
居中对齐并设置固定宽度
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3