Java FTP

用JAVA获取FTP文件列表

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/,如果目录不存在回自动创建目录
  * @throws Exception
  */
 public boolean upload(String localDirectoryAndFileName,String ftpFileName,String ftpDirectory)throws Exception {
  if(!open())
   return false;
  FileInputStream is=null;
  TelnetOutputStream os=null;
  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();
 
   os = ftpClient.put(ftpDirectory + "/"
     + ftpFileName);
   File file_in = new File(localDirectoryAndFileName);
   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(ftpDirectoryAndFileName);       
        java.io.File outfile = new java.io.File(localDirectoryAndFileName);
        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;
  }
  /**
   * 关闭链接
   */
  public void close()
  {
   try
   {
       if(ftpClient!=null&&ftpClient.serverIsOpen())
        ftpClient.closeServer();
   }catch(Exception e)
   {
   
   }
  }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值