Java FTP 实现跨服务器文件上传下载
2013-11-19 14:41
1151 查看
文件传输协议(FTP:File Transfer Protocol)使得主机间可以共享文件。 FTP 使用 TCP 生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于数据传输。控制连接使用类似 TELNET 协议在主机间交换命令和消息。文件传输协议是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上传文件,创建或改变服务器上的目录。
Java FTP 实现跨服务器文件上传下载
实现原理:文件存储服务器端安装
Serv-U FTP服务器,环境配好后通过Java程序访问(读取、写入等操作)目录:
Serv-U服务器环境配好之后,本机可通过在 Windows
资源管理器或浏览器中打开 FTP 站点测试能否访问,如:ftp://192.168.1.2
输入用户名、密码点击登录后便可访问共享目录,访问目的用以测试Serv-U服务器环境是否搭建成功。
具体Serv-U服务器相关配置信息详见资源内介绍,在此不累赘描述,Serv-U下载地址:http://download.csdn.net/detail/for_china2012/6574769
Serv-U服务器环境搭建成功后,便可通过Java程序访问:
[java]
view plaincopyprint?
package com.ftp.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
/**
* FTP服务器工具类
*
* @author 码农先生
* @version 1.0
* @date 2013-11-18
*/
public
fe7e
class FTPUtil {
/**
* 上传文件至FTP服务器
*
* @param url
* 服务器IP地址
* @param port
* 服务器端口
* @param userName
* 用户登录名
* @param password
* 用户登录密码
* @param storePath
* 服务器文件存储路径
* @param fileName
* 服务器文件存储名称
* @param is
* 文件输入流
* @return
* <b>true</b>:上传成功
* <br/>
* <b>false</b>:上传失败
*/
public static boolean storeFile (String url, int port, String userName, String password, String storePath, String fileName, InputStream is) {
boolean result = false;
FTPClient ftp = new FTPClient();
try {
// 连接至服务器,端口默认为21时,可直接通过URL连接
ftp.connect(url ,port);
// 登录服务器
ftp.login(userName, password);
// 判断返回码是否合法
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
// 不合法时断开连接
ftp.disconnect();
// 结束程序
return result;
}
// 设置文件操作目录
ftp.changeWorkingDirectory(storePath);
// 设置文件类型,二进制
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
// 设置缓冲区大小
ftp.setBufferSize(3072);
// 上传文件
result = ftp.storeFile(fileName, is);
// 关闭输入流
is.close();
// 登出服务器
ftp.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 判断输入流是否存在
if (null != is) {
// 关闭输入流
is.close();
}
// 判断连接是否存在
if (ftp.isConnected()) {
// 断开连接
ftp.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
/**
* 从FTP服务器下载文件至本地
*
* @param url
* 服务器IP地址
* @param port
* 服务器端口
* @param userName
* 用户登录名
* @param password
* 用户登录密码
* @param remotePath
* 服务器文件存储路径
* @param fileName
* 服务器文件存储名称
* @param localPath
* 本地文件存储路径
* @return
* <b>true</b>:下载成功
* <br/>
* <b>false</b>:下载失败
*/
public static boolean retrieveFile (String url, int port, String userName, String password, String remotePath, String fileName, String localPath) {
boolean result = false;
FTPClient ftp = new FTPClient();
OutputStream os = null;
try {
// 连接至服务器,端口默认为21时,可直接通过URL连接
ftp.connect(url ,port);
// 登录服务器
ftp.login(userName, password);
// 判断返回码是否合法
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
// 不合法时断开连接
ftp.disconnect();
// 结束程序
return result;
}
// 设置文件操作目录
ftp.changeWorkingDirectory(remotePath);
// 设置文件类型,二进制
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
// 设置缓冲区大小
ftp.setBufferSize(3072);
// 设置字符编码
ftp.setControlEncoding("UTF-8");
// 构造本地文件对象
File localFile = new File(localPath + "/" + fileName);
// 获取文件操作目录下所有文件名称
String[] remoteNames = ftp.listNames();
// 循环比对文件名称,判断是否含有当前要下载的文件名
for (String remoteName: remoteNames) {
if (fileName.equals(remoteName)) {
result = true;
}
}
// 文件名称比对成功时,进入下载流程
if (result) {
// 构造文件输出流
os = new FileOutputStream(localFile);
// 下载文件
result = ftp.retrieveFile(fileName, os);
// 关闭输出流
os.close();
}
// 登出服务器
ftp.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 判断输出流是否存在
if (null != os) {
// 关闭输出流
os.close();
}
// 判断连接是否存在
if (ftp.isConnected()) {
// 断开连接
ftp.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
public static void main(String[] args) {
// try {
// FileInputStream fis = new FileInputStream(new File("D:/Soft Storage/软件工具箱/HTML_Help_WorkShop_1.3_XiaZaiBa.zip"));
// System.out.println(storeFile("192.168.1.2", 21, "admin", "1", "C:/Documents and Settings/Administrator/桌面", RandomUUID.random() + ".zip", fis));
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// }
System.out.println(retrieveFile("192.168.1.2", 21, "admin", "1", "C:/Documents and Settings/Administrator/桌面", "ab86b6a3fbd14b94bdbac6b9aa971a99.zip", "C:/Users/Administrator/Desktop"));
}
}
相关文章推荐
- java+jsp代码实现从FTP服务器上传下载文件
- JAVA实现FTP服务器文件的上传,下载,删除功能
- java实现文件上传下载至ftp服务器
- Java连接FTP服务器并且实现对其文件的上传和下载
- java操作ftp实现文件的上传下载(适用于图片文档服务器)
- Java连接FTP服务器并且实现对其文件的上传和下载
- Java实现ftp上传下载、删除文件及在ftp服务器上传文件夹的方法
- Java实现FTP服务器的上传、下载、删除、查看文件列表
- Java FTP 实现跨服务器文件上传下载
- java实现文件上传下载至ftp服务器
- Java代码实现FTP服务器上传文件与下载文件
- Java连接FTP服务器并且实现对其文件的上传和下载
- Java连接FTP服务器并且实现对其文件的上传和下载
- Java FTP 实现跨服务器文件上传下载
- Java连接FTP服务器并且实现对其文件的上传和下载
- Java实现FTP文件与文件夹的上传和下载
- Java代码实现上传文件到Ftp服务器
- java实现把文件上传至ftp服务器
- Java实现FTP文件上传与下载
- Java 利用Apache Commons Net 实现 FTP文件上传下载