ftp使用
1.pom文件中添加依赖
<!-- ftp使用 -->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency> 2.代码样例:
package com.migu.reading.utils; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply; import com.migu.reading.iufs.domain.InviteResultCode;
import com.migu.reading.iufs.domain.IufsException; import java.io.*;
import java.net.SocketException; public class FtpUtil
{ private static final Log LOGGER = LogFactory.getLog(FtpUtil.class); /**
* 获取FTPClient对象
*
* @param ftpHost
* FTP主机服务器
* @param ftpPassword
* FTP 登录密码
* @param ftpUserName
* FTP登录用户名
* @param ftpPort
* FTP端口 默认为21
* @return
* @throws IOException
* @throws Exception
*/
public static FTPClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort)
{
FTPClient ftpClient = new FTPClient();
try
{
ftpClient = new FTPClient();
ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器
ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器
if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode()))
{
LOGGER.info("未连接到FTP,用户名或密码错误。");
ftpClient.disconnect();
}
else
{
LOGGER.info("FTP连接成功。");
}
}
catch (SocketException e)
{
LOGGER.error("FTP的IP地址可能错误,请正确配置。e:{}" + e);
}
catch (IOException e)
{
LOGGER.error("FTP的端口错误,请正确配置。e:{}" + e);
}
return ftpClient;
} /**
* 下载文件
*
* @param ftpHost ftp服务器地址
* @param ftpUserName 用户名
* @param ftpPassword 指定用户密码
* @param ftpPort ftp服务器端口号
* @param ftpPath ftp文件存放物理路径
* @param localPath 下载到的本地路径
*/
public static boolean downloadFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort,
String ftpPath, String localPath)
{
FTPClient ftpClient = null;
boolean result = false;
boolean createOrExistsDir = FileTools.createOrExistsDir(localPath);
if (!createOrExistsDir)
{
LOGGER.error("FtpUtil.downloadFile create localPath error");
return result;
}
try
{
ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
// 设置被动模式,开通一个端口来传输数据
ftpClient.enterLocalPassiveMode();
ftpClient.setControlEncoding("UTF-8"); // 中文支持
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.setBufferSize(500);
// 截取路径
String path = ftpPath.substring(0, ftpPath.lastIndexOf("/") + 1);
boolean changeWorkingDirectory =
ftpClient.changeWorkingDirectory(new String(path.getBytes(), "ISO-8859-1")); if (changeWorkingDirectory)
{
File ftpPathFile = new File(ftpPath);
File localFile = new File(localPath + "/" + ftpPathFile.getName()); FileOutputStream os = new FileOutputStream(localFile);
String ftpPathFileName = new String(ftpPathFile.getName().getBytes("UTF-8"), "ISO-8859-1");
result = ftpClient.retrieveFile(ftpPathFileName, os);
os.close();
ftpClient.logout();
}
else
{
LOGGER.error("FtpUtil.downloadFile ftpPath is error");
throw new IufsException(InviteResultCode.FTP_PATH_ERROR.getCode(),
InviteResultCode.FTP_PATH_ERROR.getDesc());
}
// ftpClient.listDirectories()
// 判断文件是否存在
// String file = ftpPath.substring(ftpPath.lastIndexOf("/") + 1);
// //
// InputStream is =
// ftpClient.retrieveFileStream(new String(file.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING));
// if (is == null || ftpClient.getReplyCode() == FTPReply.FILE_UNAVAILABLE)
// {
// throw new IufsException(InviteResultCode.FTP_PATH_ERROR.getCode(),
// InviteResultCode.FTP_PATH_ERROR.getDesc());
// }
// is.close();
// ftpClient.completePendingCommand(); return result;
}
catch (FileNotFoundException e)
{
LOGGER.error("没有找到" + ftpPath + "文件,e:{}", e);
return false;
}
catch (SocketException e)
{
LOGGER.error("连接FTP失败.e:{}", e);
return false;
}
catch (IOException e)
{
LOGGER.error("文件读取错误。e:{}", e);
return false;
}
} /**
* 上传文件
*
* @param ftpHost ftp服务器地址
* @param ftpUserName anonymous匿名用户登录,不需要密码。administrator指定用户登录
* @param ftpPassword 指定用户密码
* @param ftpPort ftp服务员器端口号
* @param ftpPath ftp文件存放物理路径
* @param fileName 文件路径 */
public static void uploadFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort, String ftpPath,
String fileName, InputStream input)
{
FTPClient ftp = null;
try
{
ftp = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
ftp.changeWorkingDirectory(ftpPath);
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
fileName = new String(fileName.getBytes("GBK"), "iso-8859-1");
boolean storeFile = ftp.storeFile(fileName, input);
System.out.println("是否上传成功--" + storeFile);
input.close();
ftp.logout();
System.out.println("upload succes!");
}
catch (Exception e)
{
e.printStackTrace();
}
} @SuppressWarnings("unused")
private static boolean downFileOrDir(String ftpFilePath, String localDir, String ftpHost, String ftpUserName,
String ftpPassword, int ftpPort)
{ boolean result = true; FileOutputStream fos = null;
FTPClient ftpClient = null;
try
{
ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort); File file = new File(ftpFilePath);
File temp = new File(localDir);
ftpClient.enterLocalPassiveMode();
ftpClient.setBufferSize(1024);
// 设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); if (!temp.exists())
{
if (!temp.mkdirs())
{
}
}
// 如果不是目录则表示是单个文件的下载
String filePathsss = ftpFilePath.substring(0, ftpFilePath.lastIndexOf("/") + 1);
boolean b = ftpClient.changeWorkingDirectory(filePathsss);
if (!b)
{
LOGGER.error("------------ftpFile not exists-------------");
// 报错
}
String[] names = ftpClient.listNames();
for (String name : names)
{
if (file.getName().equals(name))
{
File localfile = new File(localDir + File.separator + file.getName());
if (!localfile.exists())
{
fos = new FileOutputStream(localfile);
result = ftpClient.retrieveFile(file.getName(), fos);
}
else
{
if (!localfile.delete())
{
}
fos = new FileOutputStream(localfile);
result = ftpClient.retrieveFile(file.getName(), fos);
}
ftpClient.changeToParentDirectory();
return result;
}
}
}
catch (IOException e)
{
try
{
if (null != fos)
{
fos.close();
}
}
catch (IOException e1)
{
}
result = false;
}
catch (Exception e)
{
result = false;
}
finally
{
try
{
if (null != fos)
{
fos.close();
}
}
catch (IOException e)
{
}
}
return result;
} public static void main(String[] args)
{
/*****下载文件*********/
// boolean downloadFile = downloadFile("10.211.93.173",
// "commonservice",
// "1qaz@WSX",
// 21,
// "/home/commonservice/data/vcode/muban.zip",
// "D://file");
// System.out.println("是否下载成功===》" + downloadFile); // boolean downloadFile = downFileOrDir("/home/commonservice/data/vcode/vcodeTemplate20190402162646.zip",
// "D://file",
// "10.211.93.173",
// "commonservice",
// "1qaz@WSX",
// 21);
// System.out.println(downloadFile);
// "ftp://10.211.93.173/aa.zip"
// "ftp://10.211.93.173/copyrights_exportFile/Copyrights_20171101164204.zip",
// boolean downloadFile =
// downFileOrDir("ftp://10.211.93.173/aa.zip", "D://file", "10.211.93.173", "commonservice", "1qaz@WSX", 21);
// System.out.println(downloadFile); /********上传******************/
// String filePath = "D:\\file";
// String fileName = "muban.zip";
// FileInputStream input = null;
// try
// {
// input = new FileInputStream(new File(filePath + File.separatorChar + fileName));
// }
// catch (FileNotFoundException e)
// {
// e.printStackTrace();
// }
// uploadFile("10.211.93.173",
// "commonservice",
// "1qaz@WSX",
// 21,
// "/home/commonservice/data/vcode/",
// fileName,
// input);
}
}
ftp使用的更多相关文章
- 8.仿阿里云虚拟云服务器的FTP(包括FTP文件夹大小限制)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#iis 原文:http://dnt.dkill.net/Ar ...
- Hyper-V无法文件拖拽解决方案~~~这次用一个取巧的方法架设一个FTP来访问某个磁盘,并方便的读写文件
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 服务器相关的知识点:http://www.cnblogs.com/dunitia ...
- 阿里云学生优惠Windows Server 2012 R2安装IIS,ftp等组件,绑定服务器域名,域名解析到服务器,域名备案,以及安装期间错误的解决方案
前言: 这几天终于还是按耐不住买了一个月阿里云的学生优惠.只要是学生,在学信网上注册过,并且支付宝实名认证,就可以用9块9的价格买阿里云的云服务ECS.确实是相当的优惠. 我买的是Windows S ...
- win7下利用ftp实现华为路由器的上传和下载
win7下利用ftp实现华为路由器的上传和下载 1. Win7下ftp的安装和配置 (1)开始->控制面板->程序->程序和功能->打开或关闭Windows功能 (2)在Wi ...
- Java实现FTP文件与文件夹的上传和下载
Java实现FTP文件与文件夹的上传和下载 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制 ...
- centos下开启ftp服务
如果要ftp访问linux需要安装ftp服务,vsftpd是Linux下比较好的的FTP服务器. 一.检查安装vsftp //检查是否安装vsftpd rpm -qa | grep vsftpd // ...
- 解决开启服务器防火墙导致ftp不能连接的问题
在防火墙设置的"高级"选项卡中的"网络连接设置"--"本地连接"--"设置"中添加了"FTP服务器" ...
- centos6.5 nginx-1.8.0和ftp搭建图片服务器
一.Nginx的安装步骤 1.Nginx安装环境: gcc: 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c+ ...
- Jenkins配置MSBuild实现自动部署(MSBuild+SVN/Subversion+FTP+BAT)
所要用到的主要插件: [MSBuild Plugin] 具体操作: 1.配置MSBuild的版本 [系统管理]->[Global Tool Configuration]->[MSBuild ...
- [CentOs7]搭建ftp服务器(2)——添加用户
摘要 上篇文章完成了ftp服务器的安装与匿名访问的内容,当然出于安全的考虑是不允许匿名访问服务器的,所以就有了本篇的内容 ,为ftp服务器添加用户,用改用户进行访问. vsftpd添加用户 FTP用户 ...
随机推荐
- Vue学习之生命周期钩子小结(四)
一.生命周期钩子(函数): 1.每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等.同时在这个过程中也会运 ...
- JS 数组克隆方法总结(不可更改原数组)
ES5 方法总结 1.slice let arr = [2,4,434,43]; let arr1= arr.slice();//let arr1 = arr.slice(0); arr[0] = ' ...
- MES应用案例|新宏泰电器乘上智能制造的东风
企业背景: 无锡新宏泰电器科技股份有限公司(下文简称:新宏泰电器)创立于1984年,公司主要生产断路器.微型电机.BMC/SMC材料.BMC/SMC模压制品及各类塑料模具的设计制造.已于2016年在沪 ...
- Spark高级函数应用【combineByKey、transform】
一.combineByKey算子简介 功能:实现分组自定义求和及计数. 特点:用于处理(key,value)类型的数据. 实现步骤: 1.对要处理的数据进行初始化,以及一些转化操作 2.检测key是否 ...
- 排序算法的c++实现——计数排序
任何比较排序算法的时间复杂度的上限为O(NlogN), 不存在比o(nlgN)更少的比较排序算法.如果想要在时间复杂度上超过O(NlogN)的时间复杂度,肯定需要加入其它条件.计数排序就加入了限制条件 ...
- mybatis + oracle,出现ORA-01461:仅能绑定要插入LONG列的LONG值
1.这个异常是指,用户向数据库执行插入数据操作时,某条数据的某个字段值过长,如果是varchar2类型的,当长度超过2000,--4000(最大值)之间的时候,oracle会自动将该字段值转为long ...
- 在visual studio中找到属性管理器
方法一: 我们可以在新建的项目中通过视图-->其他窗口-->属性管理器来找到. 这样就能找到属性管理器了. 感谢:https://blog.csdn.net/qq_37939434/art ...
- expect免交互用法
一.ssh免交互远程连接linux服务器 ssh在远程连接linux系统时,会有交互,比如输入yes/no,或者需要输入密码.我们怎么避免这些交互呢!比如我们可以用telnet远程登录交换机,去备份交 ...
- 排序算法合集(C++实现)
摘要 排序操作在程序设计中是非常基础和常见的,也是算法的基础部分,我对几种常见的比较排序算法进行了整理. 暴力排序(violence sort) 思想:遍历数组,每次遍历都在未排序的部分找到最小元素的 ...
- wordpress站点更换域名了如何快速设置
有时我们的wordpress站点因为各种原因需要更换域名了,如何快速设置让网站直接用新域名而不受影响呢?比如旧域名是a.com,新域名为b.com,下面这段sql代码很有用 UPDATE wp_opt ...