`
Xmenlane
  • 浏览: 1490 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.SocketException;
import java.net.URLDecoder;
import java.net.UnknownHostException;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;


import com.hikvision.cms.modules.crossing.domain.UploadParameter;
import com.hikvision.cms.scaffolding.util.string.StringUtil;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * 
 * 

 * @author  2012-6-14 上午10:21:46
 * @version V1.0
 * @modificationHistory=========================逻辑或功能性重大变更记录
 * @modify by user: {修改人} 2012-6-14
 * @modify by reason:{方法名}:{原因}
 */
public class AppcheFTP {
	
	private static Logger logger = Logger.getLogger(AppcheFTP.class);
	private static MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();//http下载支持多线程

	private static HttpClient client = new HttpClient(connectionManager); 
	
	/**
	 * 连接登录FTP服务器,获取ftp对象
	 * @author 刘卓 2012-6-15 上午11:20:43
	 * @param ipAddr
	 * @param port
	 * @param username
	 * @param password
	 * @return
	 */
	public static FTPClient login(String ipAddr, int port, String username, String password) {
		FTPClient client = new FTPClient();
		try {
			client.setConnectTimeout(1800000);// 设置超时时间
			client.connect(ipAddr, port);// 连接ftp
			client.login(username, password);// 登录ftp
			if (FTPReply.isPositiveCompletion(client.getReplyCode())) {
				// 设置编码,避免中文乱码
				client.setControlEncoding("GBK");
				FTPClientConfig config = new FTPClientConfig(FTPClientConfig.SYST_NT);
				config.setServerLanguageCode("zh");
				client.setFileType(FTPClient.BINARY_FILE_TYPE);//设置2进制传输
				logger.info("FTP连接成功。");
				return client;
			} else {
				logger.info("未连接到FTP,用户名或密码错误。");
				client.disconnect();
			}
		} catch (SocketException e) {
			logger.info("FTP的IP地址可能错误,请正确配置。" + e.getMessage());
			// TODO: handle exception
		} catch (IOException e) {
			// TODO: handle exception
			logger.info("FTP的端口错误,请正确配置。" + e.getMessage());
		}
		return null;
	}
	
	
	/**
	    * 检查文件夹是否存在
	    * @param dir
	    * @param ftpClient
	    * @return
	    */
	    public static Boolean isDirExist(String dir, FTPClient ftpClient) { 
	    try { 
	       ftpClient.changeWorkingDirectory(dir); 
	    } catch (Exception e) {
	    	//e.printStackTrace();
	       return false; 
	    } 
	    return true; 
	    }
	    
	/**
	 * 遍历ftp指定路径下的文件夹
	 * @author  2012-6-15 上午11:30:28
	 * @param client
	 * @param pathName
	 * @param ext
	 * @param idexsString
	 * @param arFiles
	 * @throws IOException
	 */
	public static void List(FTPClient client, String pathName, String ext, String idexsString, List<String> arFiles)
	        throws IOException {
		if (pathName.startsWith("/") && pathName.endsWith("/")) {
			String directory = pathName;
			// 更换目录到当前目录
			client.changeWorkingDirectory(directory);
			FTPFile[] files = client.listFiles();
			for (FTPFile file : files) {
				if (file.isDirectory()) {//如果是目录
					if (!file.getName().equals(".") && (!file.getName().equals(".."))) { // 注意这里的判断,否则会出现死循环!!!!
						if (idexsString.indexOf(file.getName()) > -1 && file.getName().length() == 10) {
							arFiles.add(directory + file.getName());
						}
						List(client, directory + file.getName() + "/", ext, idexsString, arFiles);//遍历
					}
				}
			}
			client.changeToParentDirectory();
		}
	}
	
	
	
	/**
	 * 读取指定文件夹下的inf文件
	 * @author  2012-6-15 上午11:35:58
	 * @param ftpClient
	 * @param ftpPath
	 * @return
	 * @throws UnsupportedEncodingException
	 * @throws Exception
	 */
	public static String readConfigFileForFTP(FTPClient ftpClient, String ftpPath) throws UnsupportedEncodingException, Exception {
		StringBuffer resultBuffer = new StringBuffer();
		try {
			ftpClient.changeWorkingDirectory(ftpPath);
			FTPFile[] fs = ftpClient.listFiles();
			System.out.println(fs.length);
			for (FTPFile file : fs) {
				InputStream in = null;
				if (file.isFile() && file.getName().endsWith("inf")) {
					ftpClient.enterLocalPassiveMode();
					in = ftpClient.retrieveFileStream(file.getName());
					ftpClient.completePendingCommand();
					if (in != null) {
						BufferedReader br = new BufferedReader(new InputStreamReader(in, "GBK"));
						String data = null;
						try {
							while ((data = br.readLine()) != null) {
								resultBuffer.append(data + "\n");
							}
							resultBuffer.append("&" + ftpPath+",");
							br.close();
						} catch (IOException e) {
							logger.error("文件读取错误。"+e.getMessage());
							e.printStackTrace();
							return null;
							}
						} else {
						logger.error("in为空,不能读取。");
						return null;
					}
					try {
						if (null != in) {
							in.close();
						}
						// 主动调用一次getReply()把接下来的226消费掉. 这样做是可以解决这个返回null问题
						System.out.println("---------" + ftpClient.getReplyCode());
						if (ftpClient.getReplyCode() == 226) {
							//ftpClient.getReply();
						}
					} catch (Exception e2) {
						logger.error("错误"+e2.getMessage());
					}
				}
			}
		} catch (FileNotFoundException e) {
			
			return null;
		} catch (SocketException e) {
			logger.error("连接FTP失败."+e.getMessage());
			//e.printStackTrace();
		} catch (IOException e) {
			logger.error("读取文件错误"+e.getMessage());
			return null;
		}
		return resultBuffer.toString();
	}
	
	/** 
     * 在服务器上创建一个文件夹 
     * @param dir 文件夹名称,不能含有特殊字符,如 \ 、/ 、: 、* 、?、 "、 <、>... 
	 * @throws IOException 

     */ 
    public static boolean makeDirectory(String dir,FTPClient ftpClient) throws IOException { 
            boolean flag = true; 
                    flag = ftpClient.makeDirectory(dir); //创建文件夹
             if (flag) { 
            	 logger.error("创建文件夹" + new String(dir.getBytes("iso-8859-1"), "GBK") + " 成功"); 
              } else { 
            	  logger.error("创建文件夹" + new String(dir.getBytes("iso-8859-1"), "GBK") + " 失败"); 
              } 

           
            return flag; 
    }

    /**
	 * 从图片服务器下载图片
	 * @author  2012-5-7 下午03:37:06
	 * @param httpAddr
	 * @return
	 * @throws Exception
	 */
	public static byte[] downLoadPicture(String httpAddr){
		GetMethod get = null;
		try {
			get = new GetMethod(httpAddr);
			client.getHttpConnectionManager().getParams().setConnectionTimeout(3000);
			client.executeMethod(get);
		} catch (HttpException e) {
			logger.info("连接图片服务器异常。");
			get.releaseConnection();
			client.getHttpConnectionManager().closeIdleConnections(0);
			return null;
		} catch (IOException e) {
			logger.info("连接图片服务器异常。");
			get.releaseConnection();
			client.getHttpConnectionManager().closeIdleConnections(0);
			return null;
		}
		byte[] data = null;
		try {
			data = get.getResponseBody();
		} catch (IOException e) {
			logger.info("下载图片异常。");
			get.releaseConnection();
			client.getHttpConnectionManager().closeIdleConnections(0);
			return null;
		}
		get.releaseConnection();
		client.getHttpConnectionManager().closeIdleConnections(0);
		return data;
	}
    /**  
     *   
     * 关闭FTP服务  
     * @param ftpClient 
     * 				客户端     
     * @throws IOException
     *   
     */  
     public static  void closeFTPClient(FTPClient ftpClient) throws IOException {   
        if (ftpClient != null)   
            ftpClient.disconnect();
    }
     
     //判断是否有该文件
     private static boolean pdFile(String filename,FTPClient ftpClient) throws IOException{
       boolean flag=false;
       String filenameString = new String(filename.getBytes("GBK"),"iso-8859-1");
       if(ftpClient.isConnected()){
         try{
           FTPFile[] file=ftpClient.listFiles(filenameString);
           if(file.length>0){
             flag=true;
           }
         }catch (Exception e) {
           // TODO: handle exception
         }
       }
       return flag;
     }
     
     /**
      * 上传文件
      * @author  2012-7-12 下午02:14:27
      * @param filename
      * @param input
      * @param ftpClient
      * @return
      * @throws Exception
      */
     public static int upLoadFile(String filename,InputStream input,FTPClient ftpClient) throws Exception{
       int i=0;
       String filenameString = new String(filename.getBytes("GBK"),"iso-8859-1");//转码
      
       if(ftpClient.isConnected()){
    	   ftpClient.enterLocalPassiveMode();
         try{
        	 
            ftpClient.storeFile(filenameString, input);
         }
         catch (Exception e) {
           // TODO: handle exception
          logger.error("上传"+filename+"失败:",e);
           i=1;
         }
       }else{
         logger.error("未连接FTP服务器");
         i=2;
       }
       return i;
     }
     
     
	public static String changTotimeString(String str){
		StringBuffer stringBuffer = new StringBuffer();
		if(StringUtil.isNotNullOrEmpty(str)){
			String temp = str.substring(10, str.length()-1);
			stringBuffer.append(temp.substring(0, 4)+"-"+temp.substring(4,6)+"-"+temp.substring(6,8));
			stringBuffer.append(" "+temp.substring(8, 10)+":"+temp.substring(10, 12)+":"+temp.substring(12, 14)+":"+temp.substring(14, temp.length()));
		}
		return stringBuffer.toString();
	}
	
	/**
	 * 读取xml配置文件
	 * @author  2012-7-12 下午02:15:53
	 * @return
	 */
	public static UploadParameter readXmlConfig(){
	    Document configDoc = null;
		String defaultPath = "";
		try {
			defaultPath = URLDecoder.decode(XmlUtil.class.getResource("/")
					.getFile()
					+ "upLoadVehiclealarmdata.xml", "gbk");
		} catch (UnsupportedEncodingException e) {
			logger.error("文件路径转码失败!", e);
		}
		SAXBuilder sb = new SAXBuilder();
		try {
			configDoc = sb.build("file:///"+defaultPath);//如果是中文路径,必须加file:///
		} catch (Exception e) { // 构造文档对象
			logger.error("xml文件读取失败!", e);
			
		}
		Element root = configDoc.getRootElement(); // 获取根元素
		Element enable = root.getChild("EnableTask");
		UploadParameter uploadParameter = new UploadParameter();
		uploadParameter.setEnableTask(enable.getText().equals("true"));
		uploadParameter.setFtpIP(root.getChild("ftpIP").getText());
		uploadParameter.setFtpPort(root.getChild("ftpPort").getText());
		uploadParameter.setUsername(root.getChild("userName").getText());
		uploadParameter.setDbPasswd(root.getChild("passWd").getText());
		return uploadParameter;	
	}
	
	/**
	 * 压缩图片到固定的尺寸
	 * @author  2012-7-26 下午01:55:42
	 * @param inputStream
	 * @param width
	 * @param height
	 * @return
	 */
	 public static ByteArrayInputStream  imageScale(InputStream inputStream, int width, int height) {  
	        try {  
	            Image image = javax.imageio.ImageIO.read(inputStream);  //从输入流读取图片
	            image = image.getScaledInstance(width, height,  
	            		Image.SCALE_FAST);  
	          
	            BufferedImage mBufferedImage = new BufferedImage(width, height,  
	                    BufferedImage.TYPE_INT_RGB);  
	            mBufferedImage.getGraphics().drawImage(
	    				image, 0, 0, null);  
	   
	           
	            OutputStream out = new ByteArrayOutputStream();  
	            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); //以流的方式输出图片
	            JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(mBufferedImage);
				param.setQuality(0.5f, false);
				encoder.setJPEGEncodeParam(param);
	            encoder.encode(mBufferedImage);
	            /**
	             * 将outputStream 转为inputStream
	             */
	            ByteArrayOutputStream   baos=new   ByteArrayOutputStream();  
	            baos=(ByteArrayOutputStream) out;  
	            ByteArrayInputStream swapStream = new ByteArrayInputStream(baos.toByteArray());  //将输出流转为输入流
	            out.close();  //关闭流
	            out=null;
	            return swapStream;  
	        } catch (Exception e) {  
	           e.printStackTrace(); 
	        }
	       return null;
	    }  
	
	  public static void main(String[] args)  {    
	    	 try{
	         String server = "10.64.52.15";   
	         String user = "admin";
	         String passWord = "12345";
	         System.out.println("begin connect!");
	         FTPClient ftpClient = AppcheFTP.login("10.64.52.15", 21, "admin", "12345");
	         		       
	         System.out.println("connect success!");
	         try{
                      // 设置编码,避免中文乱码
	        	 String savefilename = new String("20110101".getBytes("GBK"),"iso-8859-1"); 
	        	 if(ftpClient.changeWorkingDirectory(savefilename)){
	        		System.out.println("weee");
	        	 }else{
	        	 
	        	 AppcheFTP.makeDirectory(savefilename, ftpClient);
	        	 }
	        	 //createDir(savefilename,ftpClient);
	         }catch (Exception e) {
				e.printStackTrace();
			}
	         AppcheFTP.closeFTPClient(ftpClient);
	         System.out.println("close success!");
	    	 }catch(UnknownHostException e){
	    		 System.out.println("java.net.UnknownHostException");
	    	 }catch(IOException e){
	    		 System.out.println("test!");
	    	 }
	          
	     }   
0
2
分享到:
评论

相关推荐

    apache FTPserver 安装包

    4. **多平台支持**:Apache FTPServer可以在多种操作系统上运行,包括Windows、Linux、Unix等。 5. **强大的配置能力**:通过XML配置文件,管理员可以精细地控制FTP服务器的行为,例如设置用户权限、限制速度、配置...

    Apache FTPServer的配置使用

    Apache FTPServer:Apache 软件基金会开发的一款 FTP 服务器,支持多种操作系统,功能强大、灵活。 FileZilla Server:一个免费的 FTP 服务器,支持多种操作系统,易于使用。 VSFTP:一个安全、稳定的 FTP 服务器...

    apache ftpserver笔记

    这个库提供了丰富的API,支持基本的FTP操作,如连接、登录、上传、下载、删除文件,以及断点续传和处理中文文件名的功能。断点续传在大文件传输中尤为重要,它可以避免因网络问题中断传输后从头开始。实现断点续传的...

    Apache Ftpserver 全套

    你可以查看并学习如何实现FTP协议,如何处理用户认证,以及如何处理文件上传和下载等操作。 在深入研究Apache Ftpserver时,你还需要了解以下关键概念: 1. **模块化设计**:Apache Ftpserver的模块化结构允许你...

    apache ftp工具所需jar

    使用这些JAR文件,开发者可以构建一个功能齐全的FTP客户端,能够方便地执行各种FTP操作。例如,通过`commons-net-1.4.1.jar`中的`FTPClient`对象,可以建立与FTP服务器的连接,然后使用`login()`方法登录,`change...

    apache ftpserver讲解

    例如,对于 Apache FTP Server 1.0.5 版本,可以根据不同的操作系统选择对应的安装包。 2. **安装** - **Linux/Unix系统**:使用命令 `tar -xzvf ftpserver-1.0.5.tar.gz` 进行解压安装。 - **Windows系统**:...

    Apache Ftp Server使用说明

    Apache Ftp Server是一款开源的FTP服务器软件,基于Java平台,由Apache软件基金会开发。它提供了高度可配置性和灵活性,使得用户可以根据自身需求定制FTP服务。本文将深入探讨Apache Ftp Server的使用方法,包括安装...

    (转)Java使用Apache FtpServer实现嵌入式FTP服务器

    这个库提供了FTP客户端功能,允许Java程序连接到FTP服务器,执行上传、下载、列表文件等操作。它的使用方式与Apache FtpServer类似,需要添加依赖并调用相应的API方法。 总结起来,Apache FtpServer是Java开发人员...

    apache ftpserver使用讲解

    启动Apache FTP Server的方法因操作系统而异: - **Linux**: ```bash cd %FTP_HOME% bin/ftpd.sh res/conf/ftpd-full.xml ``` - **Windows**: ```bash cd %FTP_HOME% bin/ftpd.bat res/conf/ftpd-full.xml ...

    apache ftp server

    Apache FTP Server是一个开源的FTP服务器,它允许用户通过FTP协议上传、下载文件。这个服务器是用Java语言编写的,因此可以在任何支持Java的平台上运行,包括Windows、Linux、Unix等操作系统。Apache FTP Server的...

    apache-ftpserver-1.1.1.zip

    这个特定的压缩包“apache-ftpserver-1.1.1.zip”包含了该服务器软件的v1.1.1版本,适用于Linux和Windows操作系统。FTP服务器的主要作用是为用户提供一个安全、可靠的文件上传和下载服务。 Apache FTPServer的特性...

    apache ftpserver

    Apache FTPServer是一个开源的FTP服务器项目,它提供了一个强大、灵活且可扩展的平台来管理文件传输服务。这个服务器是基于Java实现的,因此具备跨平台性,可以在多种操作系统上运行,包括Windows、Linux和Mac OS等...

    apache_ftp 开发包

    然后,可以通过Apache Commons Net提供的`FTPClient`和`FTPSClient`类来创建FTP客户端,实现文件上传、下载、删除等操作。对于服务器端,可以利用FTPServer API来配置和启动FTP服务,设置用户权限,以及处理客户端...

    Java 嵌入apache.ftpserver.FtpServer 实现FTP服务

    Java中的Apache FtpServer库为开发人员提供了一个强大的框架,用于在Java应用程序中轻松地创建和管理FTP服务器。Apache FtpServer提供了丰富的API,可以定制服务器的行为,满足各种需求。本篇文章将深入探讨如何利用...

    ApacheFTP开源工具

    Apache FTP工具库提供了丰富的API,支持基本的FTP操作,如连接、断开、登录、列出目录内容、上传文件、下载文件、创建删除目录等。此外,它还支持更高级的功能,如被动模式、主动模式、二进制或文本模式的文件传输,...

    apache-ftpserver-1.0.6

    Apache FTPServer是一个开源的FTP服务器项目,源自Apache MINA项目,提供了一种高效且可扩展的方式来实现FTP(文件传输协议)服务。这个"apache-ftpserver-1.0.6"版本是该软件的一个特定发布版,包含了在该版本中所...

    Apache FTPClient操作FTP工具类

    Apache FTPClient操作FTP工具类

    apache FTP 工具类

    总结,Apache Commons Net的FTP工具类为Java开发者提供了便利的FTP操作接口,可以轻松地进行文件传输和目录管理。通过阅读`FtpUtil.java`和`FtpConfig.java`源码,我们可以了解如何在实际项目中利用这些功能来实现...

    ApacheCamel-FTP

    Apache Camel 提供了 FTP 组件,使得在 Camel 路由中集成 FTP 功能变得简单高效。 在 Apache Camel 的 FTP 组件中,你可以实现以下功能: 1. **连接到 FTP 服务器**:通过配置 FTP 客户端参数,如主机名、端口、...

Global site tag (gtag.js) - Google Analytics