首先来个FtpInfo类
package org.javawo.components.ftp;
/**
* FTP连接参数VO类
*
* @author 杨涛
*
*/
public class FtpInfo {
/** 登录用户名*/
private String name;
/** 登录密码*/
private String password;
/** 登录IP地址*/
private String ip;
/** 登录端口*/
private int port;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
}
其次再来Ftp的实际操作类:
package org.javawo.components.ftp;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
/**
*
* FTP消费类,提供一系列的FTP操作方法
*
* @author 杨涛
*
*/
public class FtpUtil {
/** 登录用户名,密码,IP等参数*/
private String name,password,ip;
/** 登录端口*/
private int port;
/** FTP操作对象*/
private FTPClient ftpClient = null;
/** 构造方法,初始化传入要连接的FTP参数信息*/
public FtpUtil(FtpInfo ftpInfo) throws Exception {
if(ftpInfo==null) {
/** 判断如果为null 就抛出初始化异常*/
throw new Exception("传递的FTP连接参数对象是null");
} else {
this.init(ftpInfo);
}
}
/**
* 下载文件到本地
*
* @param remoteFileName
* @param localFileName
*/
public void loadFile(String remoteFileName, String localFileName) {
BufferedOutputStream buffOut = null;
try {
buffOut = new BufferedOutputStream(new FileOutputStream(localFileName));
/** 写入本地文件*/
ftpClient.retrieveFile(remoteFileName, buffOut);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (buffOut != null)
buffOut.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 上传文件到FTP服务器上
*
* @param localFileStream
* @param fileName
* @return
* @throws IOException
*/
public boolean uploadFile(InputStream localFileStream, String fileName) throws IOException {
/** 返回参数*/
boolean fla = false;
try{
/** 设置文件类型*/
ftpClient.setFileType();
/** 上传之前先给文件命明为.TMP*/
String tempName = fileName+".tmp";
/** 开始上传文件*/
ftpClient.storeFile(tempName, localFileStream);
/** 上传完毕之后再该为原名*/
renameFile(tempName,fileName);
fla = true;
}catch(Exception ex){
ex.printStackTrace();
}finally {
localFileStream.close();
}
return fla;
}
/**
* 下载文件流
*
* @param remoteFileName
* @param output
* @return
*/
public boolean downloadFile(String remoteFileName, OutputStream output) throws IOException{
try {
if ((remoteFileName!=null)&&(output!=null)) {
ftpClient.setFileType();
boolean ret = ftpClient.retrieveFile(remoteFileName, output);
return ret;
} else {
return false;
}
}catch (IOException e) {
if (e.getMessage()=="IOException caught while copying." || output==null) {
ftpClient.disconnect();
}
return false;
}
}
/**
* 重命名FTP上的文件
*
* @param oldName
* @param newName
*/
public void renameFile(String oldName,String newName) {
try{
/** 重命名*/
ftpClient.rename(oldName, newName);
}catch(Exception ex){
ex.printStackTrace();
}
}
/**
* 获取服务器上的文件大小
*
* @param fileName
* @return
*/
public long getFileSize(String fileName) {
try {
StringBuffer command = new StringBuffer("size ");
command.append(fileName);
ftpClient.sendCommand(command.toString());
if (ftpClient.getReplyCode()==213)
{
String replyText=ftpClient.getReplyString().substring(4).trim();
return Long.parseLong(replyText);
}else{
return 0;
}
} catch (Throwable e) {
e.printStackTrace();
return 0;
}
}
/**
* 初始化FTP连接参数
*
* @param ftpInfo
*/
public void init(FtpInfo ftpInfo) {
this.name = ftpInfo.getName();
this.password = ftpInfo.getPassword();
this.ip = ftpInfo.getIp();
this.port = ftpInfo.getPort();
}
/**
* 连接到FTP服务器
*
*/
public void connectServer() {
/** 如果当前ftpClient对象是null且没有连接就连接到FTP服务器*/
if(this.ftpClient==null && !this.ftpClient.isConnected()) {
try {
/** 如果ftpClient对象为null就实例化一个新的*/
this.ftpClient = new FTPClient();
this.ftpClient.setDefaultPort(this.port); /** 设置默认的IP地址*/
this.ftpClient.connect(this.ip);/** 连接到FTP服务器*/
/** 登录到这台FTP服务器*/
if(ftpClient.login(this.name, this.password)){
System.out.println("在类FtpUtil中: 服务器"+this.ip+"的用户"+this.name+"登录成功!");
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
/**
* 销毁FTP服务器连接
*
*/
public void closeConnect() {
/** 判断当前ftpClient对象不为null和FTP已经被连接就关闭*/
if (this.ftpClient != null && this.ftpClient.isConnected()) {
try{
this.ftpClient.disconnect();/** 销毁FTP连接*/
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}
在来Ftp的Map连接池
package org.javawo.components.ftp;
import java.util.HashMap;
/**
* 定义一个HashMap,装载FTP连接的实例化对象,这里做FTP的连接池使用
*
* @author 杨涛
*
*/
public class FtpConnectMap {
/** K-V对应的连接池*/
@SuppressWarnings("unchecked")
private static HashMap connectMap = new HashMap();
private static FtpConnectMap ftpMap = null;
/**
* 获得FtpConnectMap的实例化对象
*
* @return
*/
public static FtpConnectMap getInstance() {
if(ftpMap==null){
ftpMap = new FtpConnectMap();
}
return ftpMap;
}
/**
* 通过Name获取存在HashMap中的FTP连接对象
*
* @param name
* @return
*/
public FtpUtil getFtpUtil(String name) {
FtpUtil ftpUtil = (FtpUtil)connectMap.get(name);
return ftpUtil;
}
/**
* 给HashMap添加一个新的FTP连接对象
*
* @param name
* @param ftpUtil
*/
@SuppressWarnings("unchecked")
public void addFtpUtil(String name,FtpUtil ftpUtil) {
connectMap.put(name, ftpUtil);
}
}
最后再来一个是Ftp的创建工厂
package org.javawo.components.ftp;
/**
* FTP操作工厂类,负责FTP的实例创建和其他
*
* @author 杨涛
*
*/
public class FtpFactory {
/**
* 创建一个FtpUtil的实例化对象
*
* @param ftpInfo
* @return
*/
public FtpUtil createFtpUtil(FtpInfo ftpInfo){
/** 获取存储对象的实例*/
FtpConnectMap ftpMap = FtpConnectMap.getInstance();
/** 从HashMap中获取一个连接的实例化对象*/
FtpUtil ftpUtil = ftpMap.getFtpUtil(ftpInfo.getName());
if(ftpUtil==null) {
try{
/** 该连接不存在于HashMap中,实例化一个连接将此连接添加到HashMap中*/
ftpUtil = new FtpUtil(ftpInfo);/** 实例化一个FTP连接*/
ftpUtil.connectServer();
ftpMap.addFtpUtil(ftpInfo.getName(),ftpUtil);
}catch(Exception ex){
ex.printStackTrace();
}
}
return ftpUtil;
}
}
相关推荐
Java FTP工具的开发通常涉及到对`FtpClient`库的使用,这是一个常见的开源库,例如Apache Commons Net。这个库提供了丰富的API,使得开发者能够轻松地实现FTP(文件传输协议)客户端的功能,包括上传、下载、删除...
因为开发一个项目要用到FTP上传功能,用的是.NET平台,当时找了半天也没有关于FTP的类,索性就自己写了一个。找了很多资料,并参考了一下Java的sun.net.FtpClient类,总算可以拿出来用,所以就迫不及待的传上来给大家...
C#的FTP操作类库,支持FTP...如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用。 那就是System.Net.FtpClient,链接地址:https://netftp.codeplex.com
FTP协议使用ASCII或二进制模式传输数据,FTPClient程序需要根据文件类型选择合适的模式。此外,FTP有主动和被动两种模式,主动模式下,服务器主动连接客户端的数据端口,而在被动模式下,客户端需要向服务器请求一个...
在本文中,我们将深入探讨如何使用`org.apache.commons.net.ftp.FTPClient`包来实现简单的文件下载功能。这个过程涉及到几个关键步骤,包括连接到FTP服务器、登录、设置传输模式、下载文件以及断开连接。 首先,你...
FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件传输。在这个QT和C++编写的`...通过学习和使用`ftpClient`,开发者可以深入理解FTP协议的工作原理,同时掌握QT库在实际项目中的应用。
CentOS某些版本中,JAVA代码执行ftpClient.listFiles()有时结果为空。本项目解决了这个问题。具体代码思路可以参考博客:http://blog.csdn.net/yingprince/article/details/51275956
通过对"FTPClient"源码的学习,开发者不仅可以深入理解C#的Socket编程,还能掌握FTP协议的工作原理,这对构建自己的网络应用程序是非常有价值的。在实际应用中,还可以进一步扩展,例如添加SSL/TLS支持以实现FTPS...
9. **安全性**:现代FTP客户端常常使用FTPS(FTP over SSL/TLS)或SFTP(SSH File Transfer Protocol)以提供加密的数据传输,增加安全性。但C语言实现这些安全特性需要额外的库支持,如OpenSSL。 通过学习和分析这...
在本文中,我们将深入探讨如何使用Qt框架来实现一个FTPServer和FTPClient。Qt是一个跨平台的应用程序开发框架,广泛用于C++编程,提供丰富的图形用户界面(GUI)功能和网络通信支持,使得开发FTP服务变得相对简单。 ...
标题中的“FTPClient.rar”指的是一个使用RAR格式压缩的文件,该文件包含了作者自行开发的FTP客户端程序。FTP,即文件传输协议(File Transfer Protocol),是互联网上用于在不同计算机之间传输文件的标准协议。FTP...
JAVA操作ftp服务器,...里面有一个本人自己写的样例,没有工厂类等其他方法,直接一个主函数下来,简单粗暴易懂。如果需要官方提供的源码以及样例,请移步https://download.csdn.net/download/yizhijiaozi/10809886
FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件传输。在这个场景中,我们关注的是基于Java的...通过理解这些核心概念,开发者可以构建自己的简单FTP服务,实现定制化的文件传输需求。
在使用LWIP的raw API编写FTP客户端时,需要理解FTP协议的命令和响应格式,以及如何通过TCP连接建立和管理这两个通道。 首先,我们需要创建控制连接,发送FTP命令如"USER"、"PASS"进行身份验证,然后可能需要发送...
curFtpClent = new FtpClient(); //HostURL curFtpClent.HostUrl = this._NfitsConfigDataCopy.DownloadURI; //サーバのサーバフォルダ curFtpClent.RemotesubDir = genreInfo.GetDownDir(); //ログインユーザ...
在Java中建立FTP连接,我们需要创建`FTPClient`对象,并使用`connect()`方法连接到FTP服务器。然后,使用`login()`方法登录到FTP服务器,提供用户名和密码。例如: ```java FTPClient ftpClient = new FTPClient...
FTPClient ftpClient = new FTPClient(); ftpClient.connect(ip, port); boolean login = ftpClient.login(user, pwd); ``` - 验证连接是否成功: ```java int replyCode = ftpClient.getReplyCode(); if (!...
在本文中,我们将重点讨论如何使用Java FtpClient 实现文件上传服务,特别是针对图片的上传,并解决配置过程中可能遇到的文件权限问题。 首先,我们需要在服务器端安装FTP服务。在这个例子中,我们选择了Ubuntu系统...
FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件传输。在这个“FTP client简单C实现”项目中,我们关注的是如何用C语言编写一个基础的FTP客户端。C语言是一种底层、高效的编程语言...