1 下载需要的jar包

Ftp服务器实现文件的上传和下载,主要依赖jar包为:

2 搭建ftp服务器

参考Windows 上搭建Apache FtpServer,搭建ftp服务器

3 主要代码

在eclipse中实现ftp的上传和下载功能还是很简单的,在编码过程中遇到的一个bug就是对于ftp中中文文件的下载不是乱码,就是下载后文件的大小是0KB。后来发现问题在于eclipse的编码,更改为“utf-8”,在上传和下载的时候,设置ftp服务端目录的名字,编码为iso-8859-1格式。

package T0728;

import java.io.FileInputStream;
import java.io.FileOutputStream; import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply; class FtpUtil {
private FTPClient ftpClient;
private String serverIp;
private int port;
private String userName;
private String passWord;
public FtpUtil(String serverIp, int port, String userName, String passWord) {
super();
this.serverIp = serverIp;
this.port = port;
this.userName = userName;
this.passWord = passWord;
} /**
* 连接ftp服务器
* @return
*/
public boolean open(){
if(ftpClient != null && ftpClient.isConnected())
return true;
//连接服务器
try{
ftpClient = new FTPClient();
ftpClient.connect(serverIp, port); //连接服务器
ftpClient.login(userName, passWord); //登录 ftpClient.setBufferSize(1024);
//设置文件类型,二进制
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); int reply = ftpClient.getReplyCode();
if(!FTPReply.isPositiveCompletion(reply)){ //判断ftp服务器是否连通
this.closeFtp();
System.out.println("FtpServer连接失败!");
return false; }
return true;
}catch(Exception e){
this.closeFtp();
e.printStackTrace();
return false;
}
} /**
* 关闭ftp服务器,主要是对disconnect函数的调用
*/
public void closeFtp() {
try {
if (ftpClient != null && ftpClient.isConnected())
ftpClient.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Close Server Success :"+this.serverIp+";port:"+this.port);
} /**
* 从ftp服务器下载文件
* @param ftpDirectoryAndFileName 包含ftp部分的文件路径和名字,这里是从ftp设置的根目录开始
* @param localDirectoryAndFieName 本文的文件路径和文件名字,相当于是绝对路径
* @return
*/
public boolean donwLoad(String ftpDirectoryAndFileName,String localDirectoryAndFieName){
if(!ftpClient.isConnected()){
return false;
}
FileOutputStream fos =null;
try {
fos = new FileOutputStream(localDirectoryAndFieName);
//下面的函数实现文件的下载功能,参数的设置解决了ftp服务中的中文问题。这里要记得更改eclipse的编码格式为utf-8
ftpClient.retrieveFile(new String(ftpDirectoryAndFileName.getBytes(), "iso-8859-1"), fos);
fos.close();
return true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return false;
}finally{ this.closeFtp();
} } /**
*从本地上传文件到ftp服务器
* @param ftpDirectoryAndFileName
* @param localDirectoryAndFieName
* @return
*/
public boolean upLoading(String ftpDirectoryAndFileName,String localDirectoryAndFieName){
if(!ftpClient.isConnected()){
return false;
} FileInputStream fis = null; try {
fis = new FileInputStream(localDirectoryAndFieName);
//和文件的下载基本一致,但是要注意流的写法
ftpClient.storeFile(new String(ftpDirectoryAndFileName.getBytes(), "iso-8859-1"), fis);
fis.close();
return true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return false;
}finally{
this.closeFtp();
}
} }

测试代码

package T0728;

public class FtpMain {

    public static void main(String[] args) {
// TODO Auto-generated method stub FtpUtil ftpUtil = new FtpUtil("168.33.51.174", 2121, "admin", "123456");
if(ftpUtil.open()){
//ftpUtil.donwLoad("/中.txt", "E:/ftp2/中文.txt");
ftpUtil.upLoading("/hh/2.mp3", "E:/ftp2/1.mp3");
}
} }

Apache FtpServer 实现文件的上传和下载的更多相关文章

  1. java实现ftp文件的上传与下载

    最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...

  2. 使用FTPClient进行文件服务器内文件的上传和下载

    我用的FTPClient是由Apache组织的commons-net.jar包中的API,这个包用起来非常的方便,很容易上手.我在项目开发的过程中主要用到了文件的上传和下载功能,下面将我开发的代码贴出 ...

  3. 初学Java Web(7)——文件的上传和下载

    文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式 ...

  4. java web(四):request、response一些用法和文件的上传和下载

    上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...

  5. java实现文件的上传和下载

    1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...

  6. Spring MVC 实现文件的上传和下载

    前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:“用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流”.我回复他说:“使用Spring MVC框架可以做到这一点,因为Spri ...

  7. 文件的上传和下载--SpringMVC

    文件的上传和下载是项目开发中最常用的功能,例如图片的上传和下载.邮件附件的上传和下载等. 接下来,将对Spring MVC环境中文件的上传和下载进行详细的讲解. 一.文件上传 多数文件上传都是通过表单 ...

  8. JavaWeb中文件的上传和下载

    JavaWeb中文件的上传和下载 转自: JavaWeb学习总结(五十)——文件上传和下载 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/4200090 ...

  9. Java中文件的上传与下载

    文件的上传与下载主要用到两种方法: 1.方法一:commons-fileupload.jar  commons-io.jar apache的commons-fileupload实现文件上传,下载 [u ...

随机推荐

  1. Unity3d简单的socket通信

    vs2010或其他创建C#工程 C#端代码一: using System; using System.Collections.Generic; using System.Linq; using Sys ...

  2. DISCUZ积分及点评需求

    1.点评设置(可增强用户互动,但又不会顶帖刷屏):目前很难限制用户通过点评刷积分,点评等同于回复但却不需要审核,目前只是简单地关闭了点评功能.需求:可以审核点评内容:可以限制点评不获得积分或每天点评获 ...

  3. JavaScript函数之递归

    递归 递归的本质就是使用函数自身来解决问题的思路. 递归的定义(摘): 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明 ...

  4. js删除 object中的空值

    var data = { a: 'a', b: '' } 删除 b和''的配对, /** * Delete all null (or undefined) properties from an obj ...

  5. Linux网络服务12——NFS共享服务

    Linux网络服务12--NFS共享服务 一.NFS简介 端口号:TCP.UDP 111端口 NFS(Network File System)网络文件系统,是一种基于TCP/IP传输的网络文件系统协议 ...

  6. Mac机上安装nvm遇到的坑--nvm command not found

    在Mac机上,我最开始是通过homebrew来安装nvm,如下: $ brew install nvm 安装完成后,在命令行输入nvm list,发现出现如下提示: What?!!我不是才安装了nvm ...

  7. Python: 作图

    在python中实现数据的可视化,也即作图,一般是依赖matplotlib宏包实现的.但常见的代码中都是加载pylab,是不是这里写错了呀?其实pylib只是matplotlib的一个模块,只是被做成 ...

  8. Web前端总结(小伙伴的)

    以下总结是我工作室的小伙伴的心得,可以参考一下 html+css知识点总结 HTMl+CSS知识点收集 1.letter-spacing和word-spacing的区别 letter-spacing: ...

  9. mysql 查询缓存配置和查看

    Mysql 查询缓存 查询缓存的作用就是当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询.这样就大大提高了性能,节省时间. 1.配置查询缓存 修改配置文 ...

  10. 第14章 Linux开机详细流程

    本文目录: 14.1 按下电源和bios阶段 14.2 MBR和各种bootloader阶段 14.2.1 boot loader 14.2.2 分区表 14.2.3 采用VBR/EBR方式引导操作系 ...