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 ...
随机推荐
-
php语言的几种循环语句的使用格式,及其区别
while 只要指定的条件成立,则循环执行代码块 do...while 首先执行一次代码块,然后在指定的条件成立时重复这个循环 for 循环执行代码块指定的次数 foreach 根据数组中每个元素来循 ...
-
转:不应该不知道C++的常用库
不应该不知道C++的常用库 非常惭愧,我过去也仅仅了解boost.STLport这样的库,以及一些GUI库,但是居然有如此众多的C++库,其实令我惊讶.当然,这个问题应该辩证的看,对于拿来主义确实可以 ...
-
Selenium实战脚本集(4)--简单的开发者头条客户端
描述 去开发者头条抓取本日的top 10内容,也就是排在前面的10个,需要抓取标题和url 将这些内容保存在数据库,推荐使用sqlite 写个简单的客户端,要求可以展示每日的内容,点击标题后可以打开浏 ...
-
ListView的简单使用和性能优化
起源:ListView是Android开发中使用最广泛的一种控件,它以垂直列表的形式显示所有列表项. 创建ListView有两种方式: ☆ 直接使用ListView进行创建. ☆让Activity继承 ...
-
php使用curl设置超时的重要性
原文:http://phpquan.com/lamp/php/php-curl-timeout/ 网站登录不了,原因是没有可用的 PHP 子进程来响应新的请求了.这可能是是由于PHP-curl 没有 ...
-
JS 工具 构建工具
1.gruntjs http://www.gruntjs.net/ 2.bootstrap http://www.bootcss.com/ 3.
-
SpringMVC之GET请求参数中文乱码
server.xml 文件中的编码过滤器设置是针对POST请求的,tomacat对GET和POST请求处理方式是不同的,要处理针对GET请求的编码问题,则需要改tomcat,conf目录下的serve ...
-
k-d树模板(BZOJ2648)
实现了插入一个点,查询距某个位置的最近点. #include <cstdio> #include <algorithm> using namespace std; , inf ...
-
图片转成base64位 页面中图片展示
<img src="data:image/gif;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABG ...
-
ubuntu默认的Python版本号修改
ubuntu默认的Python是2.7版本的,键入Python3 就可以使用Python3.X版本.下面修改默认的Python版本, 1.删除/usr/bin 下的Python链接 sudo rm / ...