涉及jar包:jftp.jar,jftp-bin-0_70.jar,log4j.jar(见附件)
1,FtpBaseUtils.java,主要作用获取IP,Port,username,password等等公共配置信息
import java.io.File;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import org.apache.log4j.Logger;
import com.xxx.vo.FtpVO;
import cz.dhl.ftp.Ftp;
import cz.dhl.ftp.FtpConnect;
public class FtpBaseUtils {
private static final Logger logger = Logger.getLogger(FtpUploadUtils.class);
private static final FtpVO ftpVo = new FtpVO();
static {
ftpVo.setIp(PropertiesUtil.getValue("FTP.IP"));
ftpVo.setPort(PropertiesUtil.getValue("FTP.PORT"));
ftpVo.setUser(PropertiesUtil.getValue("FTP.USER"));
ftpVo.setPassword(PropertiesUtil.getValue("FTP.PASSWORD"));
ftpVo.setFtpDir(PropertiesUtil.getValue("FTP.DIR.TASKFile"));// ftp文件存放目录
ftpVo.setLocalDir(FileUtils.getTaskFilePath());// 本地文件目录
}
public FtpBaseUtils() {
super();
}
/**
* 取得ftp连接实例
*
* @param ftpVo
* ftp连接信息
* @return Ftp cz.dhl.ftp.Ftp实例
*/
protected static Ftp getFtpInstance(FtpVO ftpVo) {
Ftp ftp = new Ftp();
try {
String ftpIp = ftpVo.getIp();
String ftpUser = ftpVo.getUser();
String ftpPsw = ftpVo.getPassword();
Integer ftpPort = Integer.valueOf(ftpVo.getPort());
logger.info("测试连接,ftp信息:" + ftpVo.toString());
try {
// 测试是否能连接ftp服务器,如果没有连接,返回失败信息
Socket client = new Socket();
System.out.println("ftp 连接开始..");
SocketAddress addr = new InetSocketAddress(ftpIp, ftpPort);
// 连接5秒后无法连接,返回失败信息
client.connect(addr, 1500); // 超时时间为1.5秒
System.out.println("ftp 断开连接..");
client.close();
} catch (Exception e) {
// TODO: handle exception
throw new Exception("ftp链接失败:" + e.getMessage());
}
/* connect & login to host */
FtpConnect ftpConn = FtpConnect.newConnect("ftp://" + ftpIp);
ftpConn.setUserName(ftpUser);
ftpConn.setPassWord(ftpPsw);
ftpConn.setPortNum(ftpPort);
ftp.connect(ftpConn);
} catch (Exception e) {
ftp = null;
logger.error("连接失败!", e);
}
return ftp;
}
/**
* 获取FTP配置信息:ip,port,上传目录。。。
*
* @return FtpVO
*/
protected static FtpVO getFtpCommonConfigVO() {
return ftpVo;
}
/**
* 删除文件
*
* @param filePath
* 文件路径名
*/
protected boolean delFile(String filePath) {
// TODO Auto-generated method stub
try {
File file = new File(filePath);
if (file.exists()) {
file.delete();
} else {
return false;
}
return true;
} catch (Exception e) {
// TODO: handle exception
System.err.println("删除文件失败:" + e.getMessage());
return false;
}
}
}
2 ,FtpUploadUtils.java负责具体上传操作
入口:uploadFile(String fileName) filename包括可获取到的完整的路径及文件名,其方法说明见注释
执行上传操作:doFtpUploadFile
import org.apache.log4j.Logger;
import com.xxx.vo.FtpVO;
import cz.dhl.ftp.Ftp;
import cz.dhl.ftp.FtpFile;
import cz.dhl.io.CoFile;
import cz.dhl.io.CoLoad;
import cz.dhl.io.LocalFile;
public class FtpUploadUtils extends FtpBaseUtils {
private static final Logger logger = Logger.getLogger(FtpUploadUtils.class);
/**
* 上传文件到FTP服务 1.先上传到WEB服务器临时目录 2.从临时目录上传到FTP服务器 3.删除临时文件 :fileName:完整路径+文件名
*
* @throws Exception
*/
public static String uploadFile(String fileName) {
logger.info("##############################");
logger.info("开始准备上传文件:" + fileName);
FtpVO ftpVO = getFtpCommonConfigVO();// 获取公共配置信息:帐号,端口
ftpVO.setFtpFileName(fileName);
ftpVO.setLocalFileName(fileName);
logger.info("获取ftp配置信息:" + JsonUtils.toJson(ftpVO, false));
Ftp ftp = getFtpInstance(ftpVO);// 获取FTP实例
String message = doFtpUploadFile(ftp, ftpVO);
// 删除临时文件
/*
* if (super.delFile(filePathName)) { logger.info("删除临时文件成功." +
* filePathName); } else { logger.warn("删除临时文件失败." + filePathName); }
*/
logger.info("########结束文件上传######");
return message;
}
private static String doFtpUploadFile(Ftp ftp, FtpVO ftpVo) {
logger.info("##### 【开始】文件上传。。。。");
String ftpDir = ftpVo.getFtpDir();
String ftpFileName = ftpVo.getFtpFileName();
String localDir = ftpVo.getLocalDir();
String localFileName = ftpVo.getLocalFileName();
String message = localFileName + "上传成功!";
try {
if (ftp == null) {
throw new Exception("ftp连接失败!FTP信息:" + ftpVo.toString());
}
CoFile tmpfile = new LocalFile(localDir + localFileName); // 本地文件
if (!tmpfile.exists()) {// 检测本地文件是否存在
logger.info("文件【" + localDir + localFileName + "】不存在");
message = "###文件" + localDir + localFileName + "】不存在";
}
CoFile ftpFolder = new FtpFile(ftpDir, ftp); // 远程文件夹
CoFile ftpFile = new FtpFile(ftpDir + ftpFileName, ftp); // 远程文件名
if (!ftpFolder.exists()) {// 检测ftp目录是否存在
ftpFolder.mkdir();
logger.warn("folder is not exist:" + ftpDir);
}
// copy file to the other position
logger.info(">>文件是否存在:" + ftpFile.exists());
if (!ftpFile.exists()) {// 检测ftp文件是否存在
if (!CoLoad.copy(ftpFile, tmpfile)) {
logger.error("文件从web服务器上传到FTP服务器失败.FTP信息:"
+ ftpVo.toString());
message = localDir + localFileName
+ "文件从web服务器上传到FTP服务器失败.FTP信息:" + ftpVo.toString();
} else {
message = localDir + localFileName + "文件上传成功";
logger.info(message);
}
} else {
message = localDir + localFileName + "已存在,上传失败! FTP信息:"
+ ftpVo.toString();
logger.warn(message);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
message = localDir + localFileName + "上传失败:" + e.getMessage();
} finally {
ftp.disconnect();
}
logger.info("上传返回信息:" + message);
logger.info("##### 【结束】文件上传操作。。。。");
return message;
}
}
3,PropertiesUtil.java:负责配置文件加载(可选,去掉之后需要修改相应代码及配置)
import java.io.IOException;
import java.util.Properties;
import org.apache.log4j.Logger;
/**
* A simple base implementation of Properties file
*
* @author Eagles 2005-12-22
*/
public final class PropertiesUtil {
protected static Logger logger = Logger.getLogger(PropertiesUtil.class);
/**
* 配置文件名称
*/
private static final String FILENAME = "config.properties";
private static Properties prop = null;
/**
* 初始化加载配置文件
*
* @return:an instance from Properties
*/
private static synchronized Properties getProperties() {
logger.debug("init an instance from the Properties");
if (prop == null) {
prop = new Properties();
try {
prop.load(PropertiesUtil.class.getClassLoader()
.getResourceAsStream(FILENAME));
return prop;
} catch (IOException ex) {
logger.error("init an instance from the Properties error:"
+ ex.getMessage());
return null;
}
}
return prop;
}
public static String getValue(String param) {
String result = getProperties().getProperty(param);
return result == null ? "" : result;
}
public static void main(String[] args) {
System.out.println(PropertiesUtil.getValue("ftpPassword"));
}
}
对应加载的配置文件
#----------------------------------------------
# Ftp Config
#----------------------------------------------
FTP.IP=192.168.7.161
FTP.USER=root
FTP.PASSWORD=etone
FTP.PORT=21
#ftp存放目录
FTP.DIR.TASKFile=/data/
#本地文件存放目录
LOCAL.DIR.TEMP.TASKFile=/temp/
存放ftp配置属性VO(可选,去掉之后需要修改相应代码及配置)
import org.apache.commons.lang.builder.ToStringBuilder;
/**
* ftp相关数据封装类
* @author Administrator
*
*/
public class FtpVO {
private String ip;
private int port;
private String user;
private String password;
private String ftpDir;
private String ftpFileName;
private String localDir;
private String localFileName;
private boolean isDelOldFile;
private boolean isReName;
public String getFtpDir() {
return ftpDir;
}
public void setFtpDir(String ftpDir) {
this.ftpDir = ftpDir;
}
public String getFtpFileName() {
return ftpFileName;
}
public void setFtpFileName(String ftpFileName) {
this.ftpFileName = ftpFileName;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public boolean isDelOldFile() {
return isDelOldFile;
}
public void setDelOldFile(boolean isDelOldFile) {
this.isDelOldFile = isDelOldFile;
}
public boolean isReName() {
return isReName;
}
public void setReName(boolean isReName) {
this.isReName = isReName;
}
public String getLocalDir() {
return localDir;
}
public void setLocalDir(String localDir) {
this.localDir = localDir;
}
public String getLocalFileName() {
return localFileName;
}
public void setLocalFileName(String localFileName) {
this.localFileName = localFileName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
4,FileUtils.java辅助类(可选,可以把此部分代码移到FtpBaseUtils.java中,writeToFile()可删掉)
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import org.apache.log4j.Logger;
public class FileUtils {
private static final Logger logger = Logger.getLogger(FileUtils.class);
public static final String taskFilePath = PropertiesUtil
.getValue("LOCAL.DIR.TEMP.TASKFile");
public static final String prefix = "test_";
public static final String suffix = ".txt";
public static String webRoot = "";
static {
// 获取webRoot目录
webRoot = FileUtils.class.getClassLoader().getResource("").toString();// file:/D:/publish/Elvis_GZ_V4/WEB-INF/classes/
if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") != -1) {
webRoot = webRoot.replace("file:/", "");// file:/D:/publish/Elvis_GZ_V4/WEB-INF/classes/
} else {
webRoot = webRoot.replace("file:", "");// file:/opt/web/Elvis_GZ_V4/WEB-INF/classes/
}
webRoot = webRoot.replace("/WEB-INF/classes/", "");
webRoot = webRoot.replace("%20", " ");
}
public static final String getWebRoot() {
return webRoot;
}
public static final String getTaskFilePath() {
return getWebRoot() + taskFilePath;
}
/**
* 内容写入指定文件
*
* @param content
* @param fileName
*/
public static void writeToFile(String content, String fileName) {
System.out.println("sssss");
BufferedWriter buffWriter = null;
try {
buffWriter = new BufferedWriter(new FileWriter(fileName, true));
buffWriter.write(content);
buffWriter.newLine();
} catch (IOException e) {
logger.error("写入文件【" + fileName + "】失败:" + e.getMessage(), e);
} finally {
if (null != buffWriter) {
try {
buffWriter.flush();
buffWriter.close();
} catch (IOException e) {
logger.error("close bufferWriter failed:" + e.getMessage(),
e);
}
}
System.out.println("eeeee");
}
}
}
分享到:
相关推荐
本篇文章将详细探讨如何利用Socket实现一个强大的文件上传工具类,以及涉及到的相关知识点。 一、Socket基础知识 Socket,也被称为套接字,是网络通信中的一个抽象概念,它代表了两台机器间通信的一个端点。在Java...
FTPUtil.vb是一个VB.NET编写的实用工具,它利用Socket编程接口实现了FTP(File Transfer Protocol)文件上传和下载的功能。FTP是一种广泛应用于互联网上的协议,主要用于在客户端与服务器之间进行文件传输。Socket是...
针对标题和描述中提到的"java工具类 ftp 文件比较 socket http",我们将探讨Java中的FTP文件传输、文件比较、Socket通信以及HTTP协议的相关知识点。 1. **Java FTP文件传输**: Java通过`java.net....
本项目"**C++ 纯SOCKET实现FTP客户端类**"专注于使用C++语言,通过原始的SOCKET接口来实现一个FTP客户端类,支持文件的下载、上传以及获取目录等功能。该实现是在Visual Studio 2008环境下编译的。 FTP客户端类的...
`上传工具类使用说明.docx`文件应该是对`UploadUtils.java`类的详细使用指南,包括如何初始化、调用上传和下载方法、配置服务器地址、处理可能出现的问题等。这份文档对于开发者来说是非常宝贵的,可以快速理解并...
在压缩包`testFtp`中,可能包含示例代码、测试用例或其他辅助资源,用于帮助开发者理解和使用这个FTP工具包。通过阅读和理解这些示例,开发者可以快速掌握如何在自己的项目中集成FTP功能。 总之,Java FTP上传工具...
使用Java进行FTP上传时,可以利用Apache Commons Net库或者Java内置的`java.net.Socket`和`java.io`类来实现。Apache Commons Net提供了一系列的FTP相关类,如FTPClient,简化了FTP操作。以下是一个简单的FTP上传...
- **Socket编程**:FTP通信依赖于TCP/IP协议,开发者需要熟悉如何使用Java的Socket类进行网络通信。 - **多线程处理**:为了确保用户界面的响应性,文件传输通常在后台线程中执行,使用AsyncTask或其他并发模型。 ...
这是使用c#实现FTP功能的工具类,包含socket技术。
Java提供了一个名为`java.net.Socket`的基本网络连接类,但直接使用它来处理FTP协议会比较复杂。因此,大多数开发者会利用Apache Commons Net库,这是一个强大的Java FTP客户端实现,简化了FTP操作。 标签"java ftp...
使用此类工具,开发者可以更好地理解和优化他们的Socket应用程序,确保网络通信的质量和稳定性。 总的来说,Socket测试工具是网络编程不可或缺的一部分,它们可以帮助我们快速定位和解决Socket通信中的问题,提高...
2. **Java FTP库**:Java提供内置的`java.net.Socket`类可以实现FTP的基本功能,但更常见的是使用第三方库如Apache Commons Net,它提供了更丰富的FTP操作接口,包括上传、下载、删除文件等,并支持中文文件名处理。...
在Java编程中,我们可以利用Java的内置库java.net.Socket和java.io流类来实现FTP上传功能,或者使用第三方库如Apache Commons Net,它提供了更方便的FTPClient接口。 在"ftp上传功能java完整代码包"中,你可以找到...
首先,FTP上传和下载是Java中常见的任务,通常通过`java.net.Socket`或`java.net.URL`类来实现,但更常见的是使用`org.apache.commons.net.ftp`库,这个库提供了FTPClient类,简化了FTP操作。例如,你可以创建一个...
Java FTP工具类是Java开发中用于处理FTP(File Transfer Protocol)协议的一种实用程序,它使得在Java应用程序中上传、下载、删除或者管理远程服务器上的文件变得简单。在本压缩包中,我们有一个名为"util"的文件,...
在这个场景中,我们看到的"Java FTP文件上传下载"是一个具体的实现,它可能包含了一个自定义的工具类`FtpUtil.java`,以及一些依赖的库文件。 `FtpUtil.java`很可能是一个封装了FTP操作的类,包括连接FTP服务器、...
SocketTool是一款在接口开发中广泛使用的实用工具,它支持创建客户端和服务端,简化了网络通信的复杂性。本文将深入探讨SocketTool的核心功能、应用场景以及如何利用它进行有效的网络编程。 首先,我们要理解什么是...
例如,Python的`ftplib`模块,Java的`java.net.Socket`和`java.io`类,或者是.NET框架中的`System.Net.FtpWebRequest`类等。这些库提供了处理FTP连接、发送命令、上传文件和创建目录的方法。 在提供的压缩包文件中...