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. 【SSH】远程下载

    scp -r root@123.67.11.93:/var/lamp/abc.txt   ./

  2. 漫游Kafka入门篇之简单介绍(1)

    介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢?   首先让我们看几个基本的消息系统术语: Kafka将消息以 ...

  3. 第六篇:二维数组的传输 (host <-> device)

    前言 本文的目的很明确:介绍如何将二维数组传递进显存,以及如何将二维数组从显存传递回主机端. 实现步骤 1. 在显存中为二维数组开辟空间 2. 获取该二维数组在显存中的 pitch 值 (cudaMa ...

  4. MySQL- INSTR 函数的用法

    测试数据库: MYSQL数据库 INSTR(STR,SUBSTR) 在一个字符串(STR)中搜索指定的字符(SUBSTR),返回发现指定的字符的位置(INDEX); STR 被搜索的字符串 SUBST ...

  5. c#基础 第三讲

    Random r = new Random();                 string x, y;             while (true)             {         ...

  6. 【BZOJ3809/3236】Gty的二逼妹子序列 [Ahoi2013]作业 莫队算法+分块

    [BZOJ3809]Gty的二逼妹子序列 Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b ...

  7. 【BZOJ1050】[HAOI2006]旅行comf 并查集

    [BZOJ1050][HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<300 ...

  8. go练习1-翻转字符串

    //翻转字符串 func T1_1() { str := "你好helloworld!" fmt.Println("翻转前", str) var ret str ...

  9. List<Integer>.remove()的一个小细节

    不废话,先上代码: ArrayList<Integer> col = new ArrayList<Integer>(); System.out.println("In ...

  10. maven项目引入jar包

    今天看一下maven项目的创建和具体操作.