lq_kevin 2010-03-26 15:16
浏览 251
已采纳

在Java中实现FTP的问题

在Java中实现FTP怎么用模糊文件名进行搜索文件名。如:20090819、20090820我想搜索下载含有200908的文件。

  • 写回答

5条回答 默认 最新

  • wanghaolovezlq 2010-03-26 15:25
    关注

    用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;
      }
      [color=red] /**

    • 返回FTP目录下的文件列表

    • @param ftpDirectory

    • @return
      /
      public List getFileNameList(String ftpDirectory)
      { [/color]
      List list = new ArrayList();
      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) {

      }
      }
      }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd