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. centos配置ssh免密码登录后,仍提示输入密码

    配置SSH无密码登录需要3步: 1.生成公钥和私钥 2.导入公钥到认证文件,更改权限 3.测试 1.生成公钥和私钥 ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 默 ...

  2. 一起talk C栗子吧(第十回:C语言实例--最小公倍数)

    各位看官们,大家好.从今天開始,我们讲大型章回体科技小说 :C栗子.也就是C语言实例. 闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们,上一回中咱们说的是最大公约数的样例,这一回咱们说的 ...

  3. Nuget包制作最佳解决方案

    https://www.cnblogs.com/drea/p/8418717.html 最近研究ABP框架,下载其全套源码,想“据为己有”,这样添加功能或者修改源码的话就非常方便了,否则搭建项目直接用 ...

  4. 实际用户ID,有效用户ID,保存的设置用户ID

    Unix中常见的几个概念,下面做一个解释. 首先需要明确一点,这几个概念都是和进程相关的. real user ID表示的是实际上进程的执行者是谁,effective user ID主要用于校验该进程 ...

  5. ThreadLocal并不是一个Thread

    ThreadLocal是什么? 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁 ...

  6. HashMap实现原理、核心概念、关键问题的总结

    简单罗列一下较为重要的点: 同步的问题 碰撞处理问题 rehash的过程 put和get的处理过程 HashMap基础: HashMap的理论基础:维基百科哈希表 JDK中HashMap的描述:Has ...

  7. Python 正则表达式贪婪模式

    贪婪模式也就是我们使用 .* 匹配任意字符时会尽可能长地向后匹配,如果我们想阻止这种贪婪模式,需要加个问号,尽可能少地匹配,如下例子: In []: import re In []: html = ' ...

  8. 浏览器出现“ net::ERR_BLOCKED_BY_CLIENT”错误的解决方法

    转载自:http://www.dbmng.com/art-2136.html Failed to load resource: net::ERR_BLOCKED_BY_CLIENT错误报告 错误原因: ...

  9. 学习ASP.NET MVC3(6)----- Filte

    前言 在开发大项目的时候总会有相关的AOP面向切面编程的组件,而MVC(特指:Asp.Net MVC,以下皆同)项目中不想让MVC开发人员去关心和写类似身份验证,日志,异常,行为截取等这部分重复的代码 ...

  10. excel 使用技巧

    计算两个日期的差值 1.计算当前日期与目标日期相差天数,下面例子中当前日期未2017/3/19 2.列增加数据条