ftp工具工具类

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;

import org.apache.commons.net.ftp.FTPClient;

public class FtpClientUtil { 
FtpClient ftpClient; 
private String server; 
private int port; 
private String userName; 
private String userPassword; 

public FtpClientUtil(String server,int port,String userName,String userPassword) 
{ 
  this.server=server; 
  this.port=port; 
  this.userName=userName; 
  this.userPassword=userPassword; 
} 
/** 
  * 链接到服务器 
  * @return 
  */ 
public boolean open() 
{ 
  if(ftpClient!=null&&ftpClient.serverIsOpen()) 
   return true; 
  try 
  { 
      ftpClient= new FtpClient(); 
      ftpClient.openServer(server,port); 
      ftpClient.login(userName, userPassword); 
      ftpClient.binary(); 
      return true; 
  } 
  catch(Exception e) 
  { 
   e.printStackTrace(); 
   ftpClient=null; 
   return false; 
  } 
} 

public boolean cd(String dir){ 
  boolean f = false; 
  try { 
   ftpClient.cd(dir); 
  } catch (IOException e) { 
 //  Logs.error(e.toString()); 
   return f; 
  } 
  return true; 
} 

/** 
  * 上传文件到FTP服务器 
  * @param localPathAndFileName 本地文件目录和文件名 
  * @param ftpFileName  上传后的文件名 
  * @param ftpDirectory FTP目录如:/path1/pathb2/,如果目录不存在回自动创建目录 ,全局ftp路径
  * @throws Exception 
  */ 
public boolean upload(String localDirectoryAndFileName,String ftpFileName,String ftpDirectory)throws Exception { 
  if(!open()) 
   return false; 
  FileInputStream is=null; 
  TelnetOutputStream os=null; 
  ftpDirectory=new String(ftpDirectory.getBytes("ISO-8859-1"), "GBK");
  try 
  { 
   char ch = ' '; 
   if (ftpDirectory.length() > 0) 
    ch = ftpDirectory.charAt(ftpDirectory.length() - 1); 
   for (; ch == '/' || ch == '\\'; ch = ftpDirectory.charAt(ftpDirectory.length() - 1)) 
    ftpDirectory = ftpDirectory.substring(0, ftpDirectory.length() - 1); 

   int slashIndex = ftpDirectory.indexOf(47); 
   int backslashIndex = ftpDirectory.indexOf(92); 
   int index = slashIndex; 
   String dirall = ftpDirectory; 
   if (backslashIndex != -1 && (index == -1 || index > backslashIndex)) 
    index = backslashIndex; 
   String directory = ""; 
   while (index != -1) { 
    if (index > 0) { 
     String dir = dirall.substring(0, index); 
     directory = directory + "/" + dir; 
     ftpClient.sendServer("XMKD " + directory + "\r\n"); 
     ftpClient.readServerResponse(); 
    } 
    dirall = dirall.substring(index + 1); 
    slashIndex = dirall.indexOf(47); 
    backslashIndex = dirall.indexOf(92); 
    index = slashIndex; 
    if (backslashIndex != -1 && (index == -1 || index > backslashIndex)) 
     index = backslashIndex; 
   } 
   ftpClient.sendServer("XMKD " + ftpDirectory + "\r\n"); 
   ftpClient.readServerResponse(); 
//   ftpClient.binary(); 
   if(!"".equals(ftpFileName)){
	   os = ftpClient.put(ftpDirectory+"/"+new String(ftpFileName.getBytes("ISO-8859-1"), "GBK")); 
	   File file_in = new File(new String(localDirectoryAndFileName.getBytes("ISO-8859-1"), "GBK"));
	   is = new FileInputStream(file_in); 
	   byte bytes[] = new byte[1024]; 
	   int i; 
	   while ((i = is.read(bytes)) != -1) 
	    os.write(bytes, 0, i); 
   }
   
   //清理垃圾 
   
    
   return true; 
  } 
  catch(Exception e) 
  { 
   e.printStackTrace(); 
   return false; 
  } 
  finally 
  { 
   if (is != null) 
      is.close(); 
   if (os != null) 
      os.close(); 
  } 
} 
/** 
  * 从FTP服务器上下载文件并返回下载文件长度 
  * @param ftpDirectoryAndFileName 
  * @param localDirectoryAndFileName 
  * @return 
  * @throws Exception 
  */ 
public long download(String ftpDirectoryAndFileName,String localDirectoryAndFileName)throws Exception 
{ 
  long result = 0; 
  if(!open()) 
   return result; 
  TelnetInputStream is = null; 
  FileOutputStream os = null; 
  try  
  {     
        is = ftpClient.get(new String(ftpDirectoryAndFileName.getBytes("ISO-8859-1"), "GBK")); 
        java.io.File outfile = new java.io.File(new String(localDirectoryAndFileName.getBytes("ISO-8859-1"), "GBK"));
        os = new FileOutputStream(outfile); 
        byte[] bytes = new byte[1024]; 
        int c; 
        while ((c = is.read(bytes)) != -1) 
        { 
            os.write(bytes, 0, c); 
            result = result + c; 
        } 
     } 
  catch (Exception e)  
  { 
         throw e; 
  } 
  finally 
  { 
      if (is != null) 
        is.close(); 
      if (os != null) 
        os.close(); 
      
   } 
      return result; 
} 
/** 
  * 返回FTP目录下的文件列表 
  * @param ftpDirectory 
  * @return 
  */ 
  public List<String> getFileNameList(String ftpDirectory) 
  { 
     List<String> list = new ArrayList<String>(); 
     if(!open()) 
   return list; 
     try  
     { 
        DataInputStream dis = new  DataInputStream(ftpClient.nameList(ftpDirectory)); 
        String filename = ""; 
        while((filename=dis.readLine())!=null)   
        { 
          list.add(filename);         
        }   
     } catch (Exception e)  
     { 
        e.printStackTrace(); 
     } 
     return list; 
  } 
  /** 
   * 删除FTP上的文件 
   * @param ftpDirAndFileName 
   */ 
  public boolean deleteFile(String ftpDirAndFileName) 
  { 
   if(!open()) 
   return false; 
   ftpClient.sendServer("DELE "+ftpDirAndFileName+"\r\n"); 
   return true; 
  } 
  /** 
   * 删除FTP目录 
   * @param ftpDirectory 
   */ 
  public boolean deleteDirectory(String ftpDirectory) 
  { 
   if(!open()) 
   return false; 
   ftpClient.sendServer("XRMD "+ftpDirectory+"\r\n"); 
   return true; 
  } 
	/**
	 * 检查文件夹是否存在
	 * 
	 * @param dir
	 * @param ftpClient
	 * @return
	 */
  private boolean isDirExist(  FTPClient ftpClient ,String dir) {
		boolean isDirExist = false;
		try {
			isDirExist = ftpClient.changeWorkingDirectory(dir);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return isDirExist;
	}
	
  /** 
   * 关闭链接 
   */ 
  public void close() 
  { 
   try 
   { 
       if(ftpClient!=null&&ftpClient.serverIsOpen()) 
        ftpClient.closeServer(); 
   }catch(Exception e) 
   { 
    
   } 
  } 
} 

你可能感兴趣的:(java)