我目前正在使用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());
}
答案 0 :(得分:0)
尝试使用递归函数。 这可能是一个检查目录中文件的函数,然后你可以检查一个文件是否有一个子目录,也就是一个目录。 如果它有一个孩子,你可以再次为该目录调用相同的功能,等等。
像这里的伪java一样:
void Function(String directory){
... run through files here
if (file.hasChild())
{
Function(file.getString());
}
}
我确信您也可以使用这种编码来计算文件...
答案 1 :(得分:0)
创建一个递归函数,给定一个可能是目录的文件,返回其中的文件和目录数。使用isDir
和listFiles
。
答案 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);
}
}
}
}