`
Sev7en_jun
  • 浏览: 1225312 次
  • 性别: Icon_minigender_1
  • 来自: 广州
博客专栏
84184fc0-d0b6-3f7f-a3f0-4202acb3caf5
Apache CXF使用s...
浏览量:111295
社区版块
存档分类
最新评论

Socket使用之Ftp下载工具类

阅读更多

 

涉及jar包:jftp.jar,jftp-bin-0_70.jar,log4j.jar(见Socket使用之Ftp上传工具类

上传见:Socket使用之Ftp上传工具类,除了FtpDownloadUtils.java之外,其他java文件和上传都一样

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 ,FtpDownloadUtils.java负责具体上传操作

入口:ftpDownloadFile(String fileName)filename包括可获取到的完整的路径及文件名,其方法说明见注释

执行下载操作:doFtpDownFile

 

 

import java.io.File;

import org.apache.log4j.Logger;

import com.etone.if1Interface.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 FtpDownloadUtils extends FtpBaseUtils {
	private static final Logger logger = Logger
			.getLogger(FtpDownloadUtils.class);

	/**
	 * fileName=路径+文件名
	 * 
	 * @param fileNames
	 */
	public String ftpDownloadFile(String fileName) {
		FtpVO ftpVO = getFtpCommonConfigVO();// 获取公共配置信息:帐号,端口
		ftpVO.setFtpFileName(fileName);// 设置要下载的文件
		ftpVO.setLocalFileName(fileName);// 存放路径及名称
		Ftp ftp = getFtpInstance(ftpVO);// 获取FTP实例

		String message = doFtpDownFile(ftp, ftpVO);
		return message;
	}

	/**
	 * 执行下载操作: FtpVO此对象里属性包含ip,用户名,帐号,存储目录等等
	 * 
	 * @param ftp
	 * @param ftpVo
	 * @return
	 */
	private String doFtpDownFile(Ftp ftp, FtpVO ftpVo) {

		String ftpDir = ftpVo.getFtpDir();
		String ftpFileName = ftpVo.getFtpFileName();
		String localDir = ftpVo.getLocalDir();
		String localFileName = ftpVo.getLocalFileName();
		String message = ftpFileName + "下载成功!";
		try {
			if (ftp == null) {
				throw new Exception("ftp连接失败!FTP信息:" + ftpVo.toString());
			}
			File localFile = new File(localDir + localFileName);
			// 判断文件在本地是否存在
			if (localFile != null && localFile.exists() && ftpVo.isDelOldFile()) {
				localFile.delete();
			}

			CoFile tmpfile = new LocalFile(localDir + localFileName); // 本地文件
			CoFile ftpFile = new FtpFile(ftpDir + ftpFileName, ftp); // 远程文件名

			// 下载文件
			if (!CoLoad.copy(tmpfile, ftpFile)) {// 下载
				message = ftpFileName + "下载失败:" + ftpVo.toString();
				logger.error("文件下载失败:" + ftpVo.toString());
			} else {// 下载成功
				message = ftpFileName + "下载成功:" + ftpVo.toString();
				logger.info("文件下载成功:" + ftpVo.toString());
			}
		} catch (Exception e) {
			message = ftpFileName + "下载失败:" + e.getMessage();
			logger.error(e.getMessage(), e);
		} finally {
			ftp.disconnect();
		}
		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");
		}
	}
}
 

 

 

0
2
分享到:
评论

相关推荐

    Socket使用之Ftp上传工具类

    NULL 博文链接:https://jyao.iteye.com/blog/1329615

    socket实现上传文件工具类

    本篇文章将详细探讨如何利用Socket实现一个强大的文件上传工具类,以及涉及到的相关知识点。 一、Socket基础知识 Socket,也被称为套接字,是网络通信中的一个抽象概念,它代表了两台机器间通信的一个端点。在Java...

    java工具类 ftp 文件比较 socket http

    针对标题和描述中提到的"java工具类 ftp 文件比较 socket http",我们将探讨Java中的FTP文件传输、文件比较、Socket通信以及HTTP协议的相关知识点。 1. **Java FTP文件传输**: Java通过`java.net....

    C++ 纯SOCKET实现FTP客户端类

    本项目"**C++ 纯SOCKET实现FTP客户端类**"专注于使用C++语言,通过原始的SOCKET接口来实现一个FTP客户端类,支持文件的下载、上传以及获取目录等功能。该实现是在Visual Studio 2008环境下编译的。 FTP客户端类的...

    FTPUtil.vb 利用Socket 实现FTP文件上传和文件下载

    FTPUtil.vb是一个VB.NET编写的实用工具,它利用Socket编程接口实现了FTP(File Transfer Protocol)文件上传和下载的功能。FTP是一种广泛应用于互联网上的协议,主要用于在客户端与服务器之间进行文件传输。Socket是...

    c#实现ftp工具类

    这是使用c#实现FTP功能的工具类,包含socket技术。

    socket test 测试工具

    使用此类工具,开发者可以更好地理解和优化他们的Socket应用程序,确保网络通信的质量和稳定性。 总的来说,Socket测试工具是网络编程不可或缺的一部分,它们可以帮助我们快速定位和解决Socket通信中的问题,提高...

    上传下载工具类java

    总结,`上传下载工具类java`是Java开发中用于便捷处理文件上传下载任务的关键组件,`UploadUtils.java`类包含了核心的上传下载方法,配合使用说明文档,可以方便地在项目中实现高效且安全的文件传输功能。...

    Android FTP上传下载工具

    - **Socket编程**:FTP通信依赖于TCP/IP协议,开发者需要熟悉如何使用Java的Socket类进行网络通信。 - **多线程处理**:为了确保用户界面的响应性,文件传输通常在后台线程中执行,使用AsyncTask或其他并发模型。 ...

    Java FTP工具类,结合文档

    Java FTP工具类是Java开发中用于处理FTP(File Transfer Protocol)协议的一种实用程序,它使得在Java应用程序中上传、下载、删除或者管理远程服务器上的文件变得简单。在本压缩包中,我们有一个名为"util"的文件,...

    SocketTool工具

    SocketTool是一款在接口开发中广泛使用的实用工具,它支持创建客户端和服务端,简化了网络通信的复杂性。本文将深入探讨SocketTool的核心功能、应用场景以及如何利用它进行有效的网络编程。 首先,我们要理解什么是...

    Ftp.rar_ftp socket java _visual c

    描述提到“Socket接口网络编程,fepde远距离下载文件功能”,这暗示我们将讨论如何使用Socket编程来实现FTP中的文件下载,特别是通过Java和Visual C++。 FTP是互联网上广泛使用的协议,用于在客户端和服务器之间...

    Java常用工具类.zip

    Java的`java.net.Socket`和`java.io`包可以实现FTP的基本功能,但更常见的是使用第三方库如Apache Commons Net,它提供了`FTPClient`类,方便进行ASCII和二进制模式的文件上传下载。 7. **日志管理工具类**:Java的...

    java ftp上传工具包

    在压缩包`testFtp`中,可能包含示例代码、测试用例或其他辅助资源,用于帮助开发者理解和使用这个FTP工具包。通过阅读和理解这些示例,开发者可以快速掌握如何在自己的项目中集成FTP功能。 总之,Java FTP上传工具...

    FTP下载和解析

    FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件传输。它允许用户从远程服务器上下载...通过使用合适的工具和编写脚本,可以高效地处理FTP文件传输任务,并对下载的文件进行有效解析。

    python编的FTP下载器

    Python 编写的FTP下载器是一个基于FTP协议的实用工具,它允许用户从远程服务器上下载文件。这个下载器由两部分组成:客户端和服务端。客户端是用户与FTP服务器交互的界面,而服务端则处理来自客户端的请求并执行实际...

    FTP工具(JAVA版)

    FTP工具(JAVA版)是一种基于Java编程语言实现的文件传输协议客户端应用,它允许用户方便地进行文件和文件夹的上传、下载以及管理操作。在Java中,FTP客户端通常通过利用java.net.Socket类和java.io流来实现与FTP...

    C#socket多线程操作读取ftp数据并进行处理

    在C#中,我们可以使用System.Net.Sockets命名空间下的Socket类来创建和操作Socket对象。通过Socket,我们可以实现TCP或UDP等不同协议的通信。 在FTP通信中,我们通常使用TCP协议,因为它提供了面向连接、可靠的数据...

    FTP工具(jdk1.6版).rar

    这个名为“FTP工具(jdk1.6版).rar”的压缩包文件包含了使用Java编程语言实现FTP客户端功能的源代码和相关资源。该工具允许用户执行FTP命令,如上传、下载、重命名、删除以及移动文件等,这些都是FTP的基本操作。 1....

Global site tag (gtag.js) - Google Analytics