`
yangsj19870829
  • 浏览: 42334 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java访问FTP

 
阅读更多

 

    这里只提供Java从FTP下载文件(获取文件流)的示例。

 

 

/**
 * 文件工具类
 * 
 */
public final class FileUtil
{
	/**
	 * 加载properties配置文件
	 * 
	 * @param filePath properties配置文件
	 * @return         返回Properties对象
	 */
	public static Properties loadProperties(String filePath)
	{
		Properties properties = new Properties();
		
		try
		{
			properties.load(new FileInputStream(new File(filePath)));
		}
		catch (FileNotFoundException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		
		return properties;
	}
}

 

 

 

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;

/**
 * FTP操作器
 */
public class FTPHandler
{
	/**
	 * 日志实例
	 */
	private static final Logger logger = Logger.getLogger(FTPHandler.class);
	
	/**
	 * classes文件夹根目录全路径
	 */
	private static final String CLASS_PATH = FTPHandler.class.getResource("/").getPath().substring(1);
	
	/**
	 * config目录名称
	 */
	private static final String CONFIG_DIR = "config"; 
	
	/**
	 * ftp连接配置
	 */
	private Properties ftpConfig;
	
	/**
	 * FTPHandler 单粒对象
	 */
	public static FTPHandler instance;
	
	/**
	 * 构造方法私有化
	 */
	private FTPHandler()
	{
		this.init();
	}
	
	/**
	 * 
	 */
	private void init()
	{
		//ftp配置文件路径
		String ftpConfigPath = CLASS_PATH.substring(0, CLASS_PATH.length() - 8) + FTPHandler.CONFIG_DIR + "/" + "ftpserver.properties";
		
		ftpConfig = FileUtil.loadProperties(ftpConfigPath);
	}
	
	/**
	 * 获取FTPHandler单粒对象
	 * 
	 * @return
	 */
	public static synchronized FTPHandler getInstance()
	{
		if (null == instance)
		{
			instance = new FTPHandler();
		}
		
		return instance;
	}
	
	/**
	 * 根据区域标记。不同的区域使用不同的账号登陆FTP
	 * 
	 * @param areaFlag 区域标记
	 * @param filePath 文件路径
	 * @return
	 */
	public InputStream  getInputStream(String areaFlag, String filePath)
	{
		FTPClient ftp = this.ftpFactory(areaFlag);
		
		InputStream in = null;
		
		try
		{
			in = ftp.retrieveFileStream(filePath);
		}
		catch (IOException e)
		{
			logger.error("获取文件流失败,文件路径:" + filePath, e);
		}
		
		this.closeFtp(ftp);
		
		return in;
	}
	
	/**
	 * ftpClient对象工厂方法
	 * 
	 * @param areaFlag 区域标记 目前不同的区域使用不同的FTP登陆账号
	 * @return
	 */
	private FTPClient ftpFactory(String areaFlag)
	{
		FTPClient ftp = new FTPClient();
		
		if (null != ftpConfig.getProperty("ftp.controlkeepalivetimeout"))
		{
			ftp.setControlKeepAliveTimeout(Long.valueOf(ftpConfig.getProperty("ftp.controlkeepalivetimeout")));
		}
		
		try
		{
			//ftp服务器地址
			ftp.connect(ftpConfig.getProperty("ftp.server"));
			
			int reply = ftp.getReplyCode();
			
			//检查连接是否正常
			if (!FTPReply.isPositiveCompletion(reply))
            {
                ftp.disconnect();
                
                logger.error("FTP服务器拒绝连接!");
            }
			
			//登陆
			if (!ftp.login(getAccountInfoByFlag(areaFlag, "username"), this.getAccountInfoByFlag(areaFlag, "password")))
            {
                ftp.logout();
            }
			else
			{
				//二进制传输
				ftp.setFileType(FTP.BINARY_FILE_TYPE);
			}
		}
		catch (Exception e)
		{
			logger.error("创建ftpClient对象失败!", e);
		}
		
		return ftp;
	}
	
	private void closeFtp(FTPClient ftp)
	{
		try
		{
			ftp.noop();
			
			ftp.logout();
		}
		catch (IOException e)
		{
			logger.error("ftpClient登出失败!", e);
		}
		finally
        {
            if (ftp.isConnected())
            {
                try
                {
                    ftp.disconnect();
                }
                catch (IOException f)
                {
                	logger.error("ftp连接关闭失败!", f);
                }
            }
        }
	}
	
	/**
	 * 获取账号信息
	 * 
	 * @param areaFlag 区域缩写
	 * @param suffix   properties后缀
	 * @return         返回账号信息
	 */
	private String getAccountInfoByFlag(String areaFlag, String suffix)
	{
		//默认情况key值
		String key = "ftp." + suffix;
		
		if (null != areaFlag && !"".equals(areaFlag))
		{
			key = "ftp." + areaFlag + "_" + suffix;
		}
		
		return ftpConfig.getProperty(key);
	}
	
//	public static void main(String[] args)
//	{
//		FTPHandler tmp = FTPHandler.getInstance();
//		
//		try
//		{
//			System.out.println(IOUtils.toString(tmp.getInputStream("11", "jQuery_Backup.txt")));
//		}
//		catch (IOException e)
//		{
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//	}
}

 

 

配置文件 

 ################################################

#Connection Configuration

ftp.server=IP地址

ftp.controlkeepalivetimeout=300

 

#Account Configuration

ftp.11_username=123

ftp.11_password=123

 

ftp.33_username=456

ftp.33_password=456

    

    

分享到:
评论

相关推荐

    java访问FtpSever

    Java访问FTPSever是一个常见的任务,特别是在开发需要与远程服务器交换文件的应用程序时。这篇博客可能探讨了如何使用Java的标准库或第三方库来实现这一功能。`commons-net-1.4.1.jar`和`jakarta-oro-2.0.8.jar`是两...

    ftp客户端11.rar_JAVA访问 FTP_ftp客户端_ftp客户端 java_java ftp客户端_java 上传下载

    总结,Java访问FTP服务器并实现文件上传下载是一项常见的任务,通过Apache Commons Net库,我们可以简化这一过程。理解FTP协议的基本原理,熟悉Java FTP客户端的使用,以及查阅相关的文档和示例,都是开发高效FTP...

    JAVA获取FTP文件列表

    ### JAVA获取FTP文件列表知识点详解 #### 一、概述 在现代软件开发中,FTP(File Transfer Protocol)是一种广泛使用的协议,用于在网络上进行文件传输。本文档将详细介绍一个基于Java的实用工具类`FtpClientUtil`...

    java 读取FTP服务器文件

    FTP提供了一种可靠的方式来传输文件,使得应用程序可以远程访问和操作存储在FTP服务器上的数据。以下是一份详细的Java FTP文件读取教程,涵盖了相关的重要知识点。 1. **FTP库的选择**: Java标准库中并没有内置...

    java搭建ftp服务器

    1.客户端通过Windows的命令行访问FTP服务器。 2.FTP服务器可以并发地服务多个客户。 3.至少实现对FTP命令user、pass、dir、get的支持。即用户注册、显示服务器端的文件列表、下载文件等。(补充了上传文件,同时处理...

    java FTP server

    1. **用户认证**:Java FTP Server需要具备用户账户管理功能,支持用户名和密码验证,确保只有授权的用户能够访问服务器上的文件。 2. **文件操作**:FTP服务器需要提供文件的上传、下载、重命名、删除等基本操作。...

    java ftp客户端,服务端

    FTP服务器的实现通常涉及维护用户认证、管理文件系统访问权限以及处理各种FTP命令。 FTP协议本身分为两种模式:主动模式(PORT)和被动模式(PASV)。在主动模式下,客户端告诉服务器它接收数据的端口,服务器则...

    java实现的远程ftp文件浏览

    FtpList部分是用来显示FTP服务器上的文件;...以下是这三部分的JAVA源程序: (1)显示FTP服务器上的文件 void ftpList_actionPerformed(ActionEvent e) { String server=serverEdit.getText(); //输入的FTP服务器的IP地址

    java ftp连接池

    Java FTP连接池是一种用于管理FTP(文件传输协议)连接的资源池,它的主要目标是提高应用程序的性能和效率。在传统的FTP操作中,每次需要连接到FTP服务器时都会创建一个新的连接,这会消耗大量时间和系统资源。而...

    java好用的ftp包

    用户java访问ftp的包,非常好用,给大家共享啊

    Java-FTPServer.rar_FTPServer JAVA_FTP服务器_java FtpServer_java 监听f

    Java FTPServer可能提供了用户管理和认证机制,允许管理员创建、修改或删除用户账户,并设置相应的访问权限。 3. **目录管理**:FTP服务器允许用户浏览、切换目录,以及上传、下载、重命名和删除文件。在Java FTP...

    javaftp.rar_JAVAFTP_Javaftp 服务器_ftp_java ftp_myftp.dll

    1. **用户认证**:JavaFTP服务器支持不同的用户账号和权限设置,确保只有经过身份验证的用户才能访问特定的文件或目录。 2. **文件传输**:服务器能够处理客户端发起的文件上传请求,将文件从客户端传输到服务器;...

    javaftp.zip_Java CORBA_ftp java_ftp user.c_java ftp_javascript

    在Java FTP应用中,这些信息通常用于验证用户身份和授权访问。 4. **线程处理(ThreadFtpHandler.class)**:`ThreadFtpHandler.class`可能是处理FTP请求的线程类,通过多线程技术来并发处理多个FTP操作,提高系统的...

    Java检测指定FTP目录下的文件名

    本示例简单的实现了一个用Java代码来访问FTP,根据指定FTP的目录,访问这个路径下面的Ftp的文件,取出这个目录下面所有文件的文件名保存到一个Map中,最后根据系统时间和文件生成时间做对比,得出该日是否正确生成...

    java实现FTP服务器_docx

    java实现FTP服务器_docx

    java实现ftp服务器端配套程序

    4. **权限控制**:FTP服务器通常需要验证用户身份,只允许授权的用户访问特定资源。这可以通过维护用户数据库或集成更复杂的认证机制如LDAP来实现。 5. **会话管理**:FTP会话可能包含多个文件传输,服务器需要跟踪...

    java FTP 包含linux与windows

    2. **登录**:使用提供的凭据进行认证,确保用户有权访问FTP服务器上的资源。 3. **上传文件**:将本地文件上传到FTP服务器,需要指定服务器上的目标路径。 4. **下载文件**:从FTP服务器下载文件到本地,同样需要...

    ftp.zip_FTP客户端程序_ftp_ftp java_ftp客户端 java_java ftp客户端

    8. **线程安全**:如果需要在多线程环境中使用FTP客户端,需要确保其线程安全,避免并发访问时的数据冲突。 9. **文件处理**:在上传或下载文件时,需要使用`java.io.File`类进行本地文件的读写操作。 10. **性能...

    基于java的ftp客户端设计与实现

    本项目旨在提供一个基于Java的FTP客户端,以满足用户对远程文件系统的访问需求。以下是对这个项目的详细解读: 1. FTP协议基础: FTP是一种用于在网络上传输文件的标准协议,它允许用户从远程服务器获取文件或向其...

    JAVA-FTP-SERVER.rar_FTP SERVER_ftp server java_java FtpServer_ja

    在“JAVA-FTP-SERVER.rar”这个压缩包中,包含了一个名为“用Java实现FTP服务器.txt”的文件,这很可能是一个关于如何使用Java编写FTP服务器的教程或者代码示例。通常,这样的文档会介绍如何设置服务器环境,创建...

Global site tag (gtag.js) - Google Analytics