JavaアクセスFTP

6277 ワード


    ここでは、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