Apache FtpServer 实现文件的上传和下载
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 实现文件的上传和下载的更多相关文章
- java实现ftp文件的上传与下载
最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...
- 使用FTPClient进行文件服务器内文件的上传和下载
我用的FTPClient是由Apache组织的commons-net.jar包中的API,这个包用起来非常的方便,很容易上手.我在项目开发的过程中主要用到了文件的上传和下载功能,下面将我开发的代码贴出 ...
- 初学Java Web(7)——文件的上传和下载
文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式 ...
- java web(四):request、response一些用法和文件的上传和下载
上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...
- java实现文件的上传和下载
1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...
- Spring MVC 实现文件的上传和下载
前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:“用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流”.我回复他说:“使用Spring MVC框架可以做到这一点,因为Spri ...
- 文件的上传和下载--SpringMVC
文件的上传和下载是项目开发中最常用的功能,例如图片的上传和下载.邮件附件的上传和下载等. 接下来,将对Spring MVC环境中文件的上传和下载进行详细的讲解. 一.文件上传 多数文件上传都是通过表单 ...
- JavaWeb中文件的上传和下载
JavaWeb中文件的上传和下载 转自: JavaWeb学习总结(五十)——文件上传和下载 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/4200090 ...
- Java中文件的上传与下载
文件的上传与下载主要用到两种方法: 1.方法一:commons-fileupload.jar commons-io.jar apache的commons-fileupload实现文件上传,下载 [u ...
随机推荐
- eclipse 好用的插件总结
改变eclipse的背景色,各种关键词颜色的插件. color theme. 在mac下最好是通过手动复制粘贴jar文件到, eclipse的plugins下面. 通过Install new soft ...
- APP热更新方案
为什么要做热更新 当一个App发布之后,突然发现了一个严重bug需要进行紧急修复,这时候公司各方就会忙得焦头烂额:重新打包App.测试.向各个应用市场和渠道换包.提示用户升级.用户下载.覆盖安装. 重 ...
- PHP编译
编译php-5.3.6的时候需要先打一个内存泄露的补丁,具体的操作如下 tar vzxf suhosin-0.9.32.1.tar.gz tar vjxf php-5.3.6.tar.bz2 cd p ...
- gradle 使用总结
什么是gradle 书面化解释: Gradle可以自动化地进行软件构建.测试.发布.部署.软件打包,同时也可以完成项目相关功能如:生成静态网站.生成文档等. Gradle是一种依赖管理工具. 它和ma ...
- 循环执行sql语句
DECLARE --声明变量 SQL_ALLTABLES LONG; SQL_INSERT LONG; TYPE THE_CURSOR_TYPE IS REF CURSOR; --定义引用游标的数据类 ...
- java中volatile不能保证线程安全
今天打了打代码研究了一下java的volatile关键字到底能不能保证线程安全,经过实践,volatile是不能保证线程安全的,它只是保证了数据的可见性,不会再缓存,每个线程都是从主存中读到的数据,而 ...
- Entity Framework入门教程:SQLite数据源访问
[环境安装] 可以通过NuGet直接搜索安装SQLite需要用到的组件 或者直接使用程序包管理器控制台 > Install-Package System.Data.SQLite 通过ADO.NE ...
- OpenCV学习1-----打开摄像头并在画面上添加水印
一直对视频或者图像添加水印很感兴趣,查找资料后用OpenCV尝试了一下. 记录下来. 1.首先是打开摄像头. 找到OpenCV官方文档给出的例子. 例子中实现的是,打开摄像头,并对画面进行高斯滤波,使 ...
- Redux-Saga学习心得
# Redux Saga ## 简述- Reducers负责处理action的state更新:- Sagas负责协调那些复杂或异步的操作. ## 安装 npm install --save redux ...
- work1-英语辅导班在线报名系统
作品简述: 这是一个英语辅导班在线报名系统,目的是提供一个供学生报名辅导班的平台,也同时为老师收集报名信息提供便利. 使用的语言: php+html+js 服务器: 新浪sae服务器,apache 数 ...