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. Spring学习(22)--- AOP之Advice应用(下)

    (六)Advice parameters(advice带参数的情况) 例子: 修改MyAspect(添加around_init方法): package com.aop.schema; import o ...

  2. Asp.net MVC 如何对所有用户输入的字符串字段做Trim处理

    经常需要对用户输入的数据在插入数据库或者判断之前做Trim处理,针对每个ViewModel的字段各自做处理是我们一般的想法.最近调查发现其实也可以一次性实现的. MVC4.6中实现方式 1,实现IMo ...

  3. SQL之trigger(触发器)

    先来看一小段程序 有如下三张表: 帐户(编号,姓名,余额,建立日期,储蓄所编号) 储蓄所(编号,名称,地址,人数,所属城市) 借贷(帐户,借贷类型,金额,日期) create trigger tri_ ...

  4. vue组件大集合 component

    vue组件分为全局组件.局部组件和父子组件,其中局部组件只能在el定义的范围内使用, 全局组件可以在随意地方使用,父子组件之间的传值问题等. Vue.extend 创建一个组件构造器 template ...

  5. R语言统计分析技术研究——卡方检验的思想和实现

    卡方检验的思想和实现 作者:李雪丽 材料摘自:百度

  6. IT学习网站

    网站 网站定位 http://www.51cto.com/ 中国领先的IT技术网站. http://www.iteye.com/ 内容齐全,功能丰富的中文IT技术门户和社区网站. http://www ...

  7. CentOS7安装docker 启动不了解决篇

    [root@test ~]# yum update [root@test ~]# yum install docker [root@test ~]# service docker start Redi ...

  8. MySQL数据库web维护客户端管理工具

    TreeSoft数据库管理系统使用JAVA开发,采用稳定通用的springMVC +JDBC架构,实现基于WEB方式对 MySQL,Oracle,PostgreSQL 等数据库进行维护管理操作. 功能 ...

  9. AngularJS模块

    方式一: <body ng-app="myApp"> <div ng-controller="myCtrl1"> <h1>{ ...

  10. axis1.4开发webservice客户端(快速入门)-基于jdk1.4

    写在前面: 对于客户端,服务端开发好了以后,客户端只需要调用就可以了.这里我们讲的是,根据服务的访问地址,来生成客户端所需要用到的代码(听说有几种调用方式,但是用到最常见的就是stub方式,貌似我说的 ...