【问题标题】:Recursively list files and directories in an FTP server using Java使用 Java 递归列出 FTP 服务器中的文件和目录
【发布时间】:2011-06-07 15:44:46
【问题描述】:

我目前正在使用 Java FTP 库 (ftp4j) 来访问 FTP 服务器。我想为服务器做一个文件计数和目录计数,但这意味着我需要在目录中的目录中列出目录中的文件,等等。

这是如何实现的?任何提示将不胜感激。

从代码中提取:

client = new FTPClient();
try {
    client.connect("");
    client.login("", "");
    client.changeDirectory("/");
    FTPFile[] list = client.list();
    int totalDIRS = 0;
    int totalFILES = 0;
    for (FTPFile ftpFile : list) {
        if (ftpFile.getType() == FTPFile.TYPE_DIRECTORY) {
            totalDIRS++;
        }
    }
    message =
        "There are currently " + totalDIRS + " directories within the ROOT directory";
    client.disconnect(true);
} catch (Exception e) {
    System.out.println(e.toString());
}

【问题讨论】:

    标签: java ftp ftp4j


    【解决方案1】:

    创建一个递归函数,给定一个可能是目录的文件,返回其中的文件和目录的数量。使用isDirlistFiles

    【讨论】:

      【解决方案2】:

      尝试使用递归函数。 这可能是一个检查目录中文件的函数,然后您可以检查文件是否有子目录,即目录。 如果它有一个孩子,您可以为该目录再次调用相同的函数,等等。

      喜欢这里的伪java:

      void Function(String directory){
       ... run through files here
       if (file.hasChild())
       {
        Function(file.getString());
       }
      }
      

      我相信您也可以使用这种编码来计算文件...

      【讨论】:

        【解决方案3】:

        只需使用如下递归函数即可。

        请注意,我的代码使用了Apache Commons Net,而不是 ftp4j,这是什么问题。但是 API 几乎是一样的,而且 ftp4j 现在似乎是一个废弃的项目。

        private static void listFolder(FTPClient ftpClient, String remotePath) throws IOException
        {
            System.out.println("Listing folder " + remotePath);
            FTPFile[] remoteFiles = ftpClient.listFiles(remotePath);
            for (FTPFile remoteFile : remoteFiles)
            {
                if (!remoteFile.getName().equals(".") && !remoteFile.getName().equals(".."))
                {
                    String remoteFilePath = remotePath + "/" + remoteFile.getName();
        
                    if (remoteFile.isDirectory())
                    {
                        listFolder(ftpClient, remoteFilePath);
                    }
                    else
                    {
                        System.out.println("Foud remote file " + remoteFilePath);
                    }
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2021-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-28
          相关资源
          最近更新 更多