Java FTP list files and directories example
- Details
- Written by Nam Ha Minh
- Last Updated on 20 July 2019   |   Print Email
1. The Apache Commons NET’s FTP API for listing files and directories
The FTPClient class provides the following methods for listing content of a directory on the FTP server:- FTPFile[] listDirectories()
- FTPFile[] listDirectories(String parent)
- FTPFile[] listFiles()
- FTPFile[] listFiles(String pathname)
Method | List files? | List directories? | List in current working directory? | List in a specified directory? |
listDirectories() | No | Yes | Yes | No |
listDirectories(String parent) | No | Yes | No | Yes |
listFiles() | Yes | Yes | Yes | No |
listFiles(String pathname) | Yes | Yes | No | Yes |
- String getName():returns name of the file or directory.
- long getSize():return size in bytes.
- boolean isDirectory():determines if the entry is a directory.
- boolean isFile():determines if the entry is a file.
- Calendar getTimestamp():returns last modified time.
- String[] listNames()
- String[] listNames(String pathname)
2. Java FTP File and Directory Listing Code Examples
FTPClient ftpClient = new FTPClient();
ftpClient.connect(server, port);
ftpClient.login(user, pass);
// lists files and directories in the current working directory
FTPFile[] files = ftpClient.listFiles();
// iterates over the files and prints details for each
DateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for (FTPFile file : files) {
String details = file.getName();
if (file.isDirectory()) {
details = "[" + details + "]";
}
details += "\t\t" + file.getSize();
details += "\t\t" + dateFormater.format(file.getTimestamp().getTime());
System.out.println(details);
}
ftpClient.logout();
ftpClient.disconnect();You can try to use other methods for experimenting yourself:FTPFile[] files = ftpClient.listFiles("/document");
FTPFile[] files = ftpClient.listDirectories("/images");
FTPFile[] files = ftpClient.listDirectories();The following code snippet demonstrates usage of listNamesmethod:String[] files = ftpClient.listNames();
if (files != null && files.length > 0) {
for (String aFile: files) {
System.out.println(aFile);
}
} 3. Java FTP File and Directory Listing Demo program
Here is a fully working demo program that connects to a FTP server, queries content of public_ftp directory using listFiles() method; and show all files and directories under server’s root directory. Finally the program logs out and disconnects from the server:import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
/**
* An example program that demonstrates how to list files and directories
* on a FTP server using Apache Commons Net API.
* @author www.codejava.net
*/
public class FTPListDemo {
public static void main(String[] args) {
String server = "www.ftpserver.com";
int port = 21;
String user = "username";
String pass = "password";
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(server, port);
showServerReply(ftpClient);
int replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
System.out.println("Connect failed");
return;
}
boolean success = ftpClient.login(user, pass);
showServerReply(ftpClient);
if (!success) {
System.out.println("Could not login to the server");
return;
}
// Lists files and directories
FTPFile[] files1 = ftpClient.listFiles("/public_ftp");
printFileDetails(files1);
// uses simpler methods
String[] files2 = ftpClient.listNames();
printNames(files2);
} catch (IOException ex) {
System.out.println("Oops! Something wrong happened");
ex.printStackTrace();
} finally {
// logs out and disconnects from server
try {
if (ftpClient.isConnected()) {
ftpClient.logout();
ftpClient.disconnect();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
private static void printFileDetails(FTPFile[] files) {
DateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for (FTPFile file : files) {
String details = file.getName();
if (file.isDirectory()) {
details = "[" + details + "]";
}
details += "\t\t" + file.getSize();
details += "\t\t" + dateFormater.format(file.getTimestamp().getTime());
System.out.println(details);
}
}
private static void printNames(String files[]) {
if (files != null && files.length > 0) {
for (String aFile: files) {
System.out.println(aFile);
}
}
}
private static void showServerReply(FTPClient ftpClient) {
String[] replies = ftpClient.getReplyStrings();
if (replies != null && replies.length > 0) {
for (String aReply : replies) {
System.out.println("SERVER: " + aReply);
}
}
}
}Screenshot of compile and run the program under Windows:
Related Java FTP Tutorials:
- List files and directories recursively on a FTP server
- Java FTP example - Search for files and directories
- Creating nested directory structure on a FTP server
- Java FTP example - Calculate total sub directories, files and size of a directory
- Determine if a directory or file exists on FTP server
- Remove an empty directory on a FTP server
- Rename file or directory on FTP server
Other Java FTP Tutorials:
- Connect and login to a FTP server
- Java FTP create directory example
- Java FTP file download tutorial and example
- Java FTP file upload tutorial and example
- Java FTP delete file example
- 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
Thank you very much for sharing this. I have the same Problem here.
FTPFile[] files1 = ftpClient.listFiles("/public_ftp");
I have to make some configuration like this and it works well :
FTPClientConfig config = new FTPClientConfig(FTPClientConfig.SYST_UNIX);
ftpClient.configure(config);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
org.eclipse.debug.core.DebugException: com.sun.jdi.ClassNotLoadedException: Type has not been loaded occurred while retrieving component type of array.
Exception in thread "main" java.net.UnknownHostException: ftpupload.net
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)