ftp上传下载文件,是遵照ftp协议上传下载文件的,本例仅以下载文件为例。

重要的方法解释:

1.FTP功能相关依赖路径:org.apache.commons.net.ftp.*;

2.ftp默认端口是21,如果非默认端口连接,需指定:ftp.connect(ftphostaddr, 22);//22为端口号

3.ftp.changeWorkingDirectory(ftppath) //实现切换目录

4.FTPFile[] fs = ftp.listFiles(); 获取指定目录下的文件列表

public class FtpTools {

    private final static String ftphostaddr = "xxx";//服务器地址
private final static String ftppath = "xxx";//操作的服务器目录
private final static String ftpname = "xxx";//服务器登录名
private final static String ftppwd = "xxx";//登录密码 private final static String localpath = getCurentContentPath()+"uploadfiles";
private final static String fileSeparator = System.getProperty("file.separator"); private static final Logger LOGGER = Logger.getLogger(FtpTools.class); public static void main(String[] args) {
FtpTools tools = new FtpTools();
tools.downFile("test.txt");
} /**
* 从文件服务器上下载文件到本地
* @param filename
*/
public static void downFile(String filename) {
FTPClient ftp = initFtp();
try{
//4.指定要下载的目录
ftp.changeWorkingDirectory(ftppath);// 转移到FTP服务器目录
//5.遍历下载的目录
FTPFile[] fs = ftp.listFiles();
for (FTPFile ff : fs) {
//解决中文乱码问题,两次解码
byte[] bytes=ff.getName().getBytes("iso-8859-1");
String fn=new String(bytes,"utf8");
if (fn.equals(filename)) {
//6.写操作,将其写入到本地文件中
LOGGER.info("下载文件:"+filename+"开始:"+System.currentTimeMillis());
File localFile = new File(localpath +fileSeparator+ ff.getName());
OutputStream is = new FileOutputStream(localFile);
ftp.retrieveFile(ff.getName(), is); //7.判断本地文件是否正确写入,如果正确写入,将文件服务器上的文件删除
if(localFile.exists()){
LOGGER.info("删除服务器上文件:"+filename);
ftp.deleteFile(ff.getName());
}
LOGGER.info("下载文件:"+filename+"结束:"+System.currentTimeMillis());
is.close();
}
}
ftp.logout();
}catch(Exception e){
e.printStackTrace();
new Exception("从服务器下载文件过程中发生错误");
}finally{
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
} public static FTPClient initFtp() {
int reply;
FTPClient ftp = new FTPClient();
try {
// 1.连接服务器
//ftp.connect(ftphostaddr);
ftp.connect(ftphostaddr, 22);
// 2.登录服务器 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(ftpname, ftppwd);
// 3.判断登陆是否成功
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
new Exception("服务器连接失败");
}
return ftp;
} public static String getCurentContentPath(){
String path = "";
path = FtpTools.class.getClassLoader().getResource("").toString();
path = path.replace("file:", "").substring(0, path.indexOf("WEB-INF")).replace("WEB-IN", "").replace("WEB-I", "");
return path;
}
}

  

java实现FTP下载文件的更多相关文章

  1. C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令

    如果下载多个文件的时候,有时候莫名其妙的出现500服务器错误,很有可能是没有设置KeepAlive 属性导致的. 出现应用程序未处理的异常:2015/1/6 11:40:56 异常类型:WebExce ...

  2. python从FTP下载文件

    #!/usr/bin/python # -*- coding: utf-8 -*- """ FTP常用操作 """ from ftplib ...

  3. java 的在线下载文件 .pdf

    java  的在线下载文件  .pdf 1.下载资源的本地位置 2.设置响应头 3.下载代码 1 PeriodicalResource periodicalResource = periodicalR ...

  4. .Net 连接FTP下载文件报错:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy

    系统环境: Windows + .Net Framework 4.0   问题描述: C#连接FTP下载文件时,在部分电脑上有异常报错,在一部分电脑上是正常的:异常报错的信息:System.Inval ...

  5. c#.net从ftp下载文件到本地

    c#.net从ftp下载文件到本地      /*首先从配置文件读取ftp的登录信息*/  ;                     ;                     , buffer_c ...

  6. 《手把手教你》系列技巧篇(五十六)-java+ selenium自动化测试-下载文件-上篇(详细教程)

    1.简介 前边几篇文章讲解完如何上传文件,既然有上传,那么就可能会有下载文件.因此宏哥就接着讲解和分享一下:自动化测试下载文件.可能有的小伙伴或者童鞋们会觉得这不是很简单吗,还用你介绍和讲解啊,不说就 ...

  7. 《手把手教你》系列技巧篇(五十七)-java+ selenium自动化测试-下载文件-下篇(详细教程)

    1.简介 前边几篇文章讲解完如何上传文件,既然有上传,那么就可能会有下载文件.因此宏哥就接着讲解和分享一下:自动化测试下载文件.可能有的小伙伴或者童鞋们会觉得这不是很简单吗,还用你介绍和讲解啊,不说就 ...

  8. [java] java 实现FTP服务器文件的上传和下载

    利用Apache commons-net 实现: package com.xwolf.driver.util; import com.xwolf.driver.exception.RunExcepti ...

  9. Java FTP下载文件以及编码问题小结

    问题 之前在开发过程中,遇到了一点问题,我要访问一个FTP服务器去下载文件详细情况如下: 1. 需要传入一个可能为中文的文件名: 2. 通过文件名去FTP上寻找该文件: 3. FTP服务器的命名编码为 ...

随机推荐

  1. 【BZOJ】1611: [Usaco2008 Feb]Meteor Shower流星雨(bfs)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1611 一眼题,bfs. #include <cstdio> #include <c ...

  2. c# http请求,获取非200时的响应体

    HttpWebResponse res = null; try { res = request.GetResponse() as HttpWebResponse; } catch (WebExcept ...

  3. 将spark默认日志log4j替换为logback

    1.将jars文件夹下apache-log4j-extras-1.2.17.jar,commons-logging-1.1.3.jar, log4j-1.2.17.jar, slf4j-log4j12 ...

  4. iOS开发之--改变系统导航的颜色,字体,还有返回样式的自定义

    在写项目的工程中,我们可能会遇到各种各样的项目,写的方法也是各有不同,不喜欢自定义的小伙伴也很多, 下面我就记录下系统导航和barbuttonitem的修改系统空间的方法: 1,添加rightbarb ...

  5. js文章收藏

    js文件被浏览器缓存的问题:http://www.cnblogs.com/wangtao_20/p/4589898.html

  6. Struts2中解决表单重复提交

    3. 表单的重复提交问题 1). 什么是表单的重复提交 > 在不刷新表单页面的前提下:  >> 多次点击提交按钮 >> 已经提交成功, 按 "回退" ...

  7. SaltStack自动化安装zabbix-server

    使用SaltStack自动化安装zabbix-server 1,设置ntp时间同步 2,安装zabbix-agent 3,安装zabbix-server 4,安装及配置mariadb(mariadb与 ...

  8. mysql状态分析之show global status

    这里整理下mysql global status的相关命令,在计算监控数据的时候需要用到 一.慢查询 show variables like '%slow%'; +------------------ ...

  9. 忽略UserInterfaceState.xcuserstate

    GIT忽略iOS项目UserInterfaceState.xcuserstate   1.删除仓库中跟踪的UserInterfaceState.xcuserstate git rm --cached ...

  10. crontab下设置ntpdate的问题

    1.在crontab里设置了ntpdate 同步时间,一段时间发现没有起作用 原来的写法是 20 00 × × × ntpdate cn.pool.ntp.org 单独拿出来执行也是没问题的,最近好好 ...