1

我目前正在使用 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());
}
4

3 回答 3

0

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

像这里的这个伪java:

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

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

于 2011-06-07T15:49:32.963 回答
0

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

于 2011-06-07T15:53:44.007 回答
0

只需使用如下所示的递归函数。

请注意,我的代码使用的是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);
            }
        }
    }
}
于 2018-06-08T05:40:44.710 回答