使用Java递归列出FTP服务器中的文件和目录

时间:2011-06-07 15:44:46

标签: java ftp ftp4j

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

3 个答案:

答案 0 :(得分:0)

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

像这里的伪java一样:

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

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

答案 1 :(得分:0)

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

答案 2 :(得分: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);
            }
        }
    }
}