Java FTP example - Calculate total sub directories, files and size of a directory
- Details
- Written by Nam Ha Minh
- Last Updated on 19 July 2019   |   Print Email
In this article, we show you how to calculate total number of sub directories, files and size of a remote directory on a FTP server, using the Apache Commons Net API. As always, the recursion algorithm is used for this kind of recursive calculation. The following is example code of a utility method that performs such calculation:
/**
* This method calculates total number of sub directories, files and size
* of a remote directory.
* @param ftpClient An instance of the FTPClient
* @param parentDir Path of the remote directory.
* @param currentDir The current directory (used for recursion).
* @return An array of long numbers in which:
* - the 1st number is total directories.
* - the 2nd number is total files.
* - the 3rd number is total size.
* @throws IOException If any I/O error occurs.
*/
public static long[] calculateDirectoryInfo(FTPClient ftpClient,
String parentDir, String currentDir) throws IOException {
long[] info = new long[3];
long totalSize = 0;
int totalDirs = 0;
int totalFiles = 0;
String dirToList = parentDir;
if (!currentDir.equals("")) {
dirToList += "/" + currentDir;
}
try {
FTPFile[] subFiles = ftpClient.listFiles(dirToList);
if (subFiles != null && subFiles.length > 0) {
for (FTPFile aFile : subFiles) {
String currentFileName = aFile.getName();
if (currentFileName.equals(".")
|| currentFileName.equals("..")) {
// skip parent directory and the directory itself
continue;
}
if (aFile.isDirectory()) {
totalDirs++;
long[] subDirInfo =
calculateDirectoryInfo(ftpClient, dirToList, currentFileName);
totalDirs += subDirInfo[0];
totalFiles += subDirInfo[1];
totalSize += subDirInfo[2];
} else {
totalSize += aFile.getSize();
totalFiles++;
}
}
}
info[0] = totalDirs;
info[1] = totalFiles;
info[2] = totalSize;
return info;
} catch (IOException ex) {
throw ex;
}
}As we can see, this static method returns an array of long numbers that is result of the calculation:
- The first number is total number of directories.
- The second number is total number of files.
- The third number is total size of the whole directory (in bytes).
And the following is a code snippet that illustrates how to use the above utility method:
String host = "www.yourserver.com";
int port = 21;
String username = "your_username";
String password = "your_password";
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(host, port);
ftpClient.login(username, password);
ftpClient.enterLocalPassiveMode();
String remoteDirPath = "/Upload";
long[] dirInfo = calculateDirectoryInfo(ftpClient, remoteDirPath, "");
System.out.println("Total dirs: " + dirInfo[0]);
System.out.println("Total files: " + dirInfo[1]);
System.out.println("Total size: " + dirInfo[2]);
ftpClient.logout();
ftpClient.disconnect();
} catch (IOException ex) {
System.err.println(ex);
}A sample output when running the above code snippet:
Total dirs: 8 Total files: 10 Total size: 68509
For your convenience, you can download the demo program in the attachments section below.
Related Java FTP Tutorials:
- Creating nested directory structure on a FTP server
- Determine if a directory or file exists on FTP server
- Java FTP example - Change working directory
- Remove an empty directory on a FTP server
- Rename file or directory on FTP server
Other Java FTP Tutorials:
- Java FTP list files and directories example
- Java FTP file download tutorial and example
- Java FTP file upload tutorial and example
- Java FTP delete file example
- Java FTP example - Search for files and directories
- How to upload a directory to a FTP server
- How to download a complete folder from a FTP server
About the Author:
Nam Ha Minh is certified Java programmer (SCJP and SCWCD). He began programming with Java back in the days of Java 1.4 and has been passionate about it ever since. You can connect with him on Facebook and watch his Java videos on YouTube.
Comments