Lớp FTPClient (org.apache.commons.net.ftp.FTPClient) của thư viện commons-net-3.3.jar cung cấp các API cần thiết để làm việc với một máy chủ thông qua giao thức FTP.
Phương thức FTPClient.listFiles() được sử dụng để get list file from FTP Server.
Có 3 cách sử dụng phương thức listFiles() như sau:
- public FTPFile[] listFiles()
- public FTPFile[] listFiles(String pathname)
- public FTPFile[] listFiles(String pathname, FTPFileFilter filter) throws IOException
Nội dung chính
Ví dụ về get list file from FTP Server
Giả sử ta có list file và folder trong path="/demo" trên FTP Server như sau:
Chương trình sau sẽ đọc tất cả các file có trong path="/demo" trên FTP Server:
File: FTPSample.java
import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; public class FTPSample { private static final String FTP_SERVER_ADDRESS = "127.0.0.1"; private static final int FTP_SERVER_PORT_NUMBER = 21; private static final int FTP_TIMEOUT = 60000; private static final int BUFFER_SIZE = 1024 * 1024 * 1; private static final String FTP_USERNAME = "haophong"; private static final String FTP_PASSWORD = "1234567890"; private FTPClient ftpClient; /** * main * * @param args */ public static void main(String[] args) { String ftpFolder = "/demo"; FTPSample ftpSample = new FTPSample(); List<FTPFile> listFtpFiles = ftpSample.getListFileFromFTPServer(ftpFolder); // show list file for (FTPFile ftpFile : listFtpFiles) { System.out.println(ftpFile.getName()); } } /** * get list from ftp server * * @author viettuts.vn * @param path * @return List<FTPFile> */ private List<FTPFile> getListFileFromFTPServer(String path) { List<FTPFile> listFiles = new ArrayList<FTPFile>(); // connect ftp server connectFTPServer(); try { FTPFile[] ftpFiles = ftpClient.listFiles(path); System.out.println(path + " has " + ftpFiles.length + "file(s)"); if (ftpFiles.length > 0) { for (FTPFile ftpFile : ftpFiles) { // add file to listFiles if (ftpFile.isFile()) { listFiles.add(ftpFile); } } } } catch (IOException ex) { ex.printStackTrace(); } finally { // disconnect ftp server disconnectFTPServer(); } return listFiles; } /** * connect ftp server * * @author viettuts.vn */ private void connectFTPServer() { ftpClient = new FTPClient(); try { System.out.println("connecting ftp server..."); // connect to ftp server ftpClient.setDefaultTimeout(FTP_TIMEOUT); ftpClient.connect(FTP_SERVER_ADDRESS, FTP_SERVER_PORT_NUMBER); // run the passive mode command ftpClient.enterLocalPassiveMode(); // check reply code if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { disconnectFTPServer(); throw new IOException("FTP server not respond!"); } else { ftpClient.setSoTimeout(FTP_TIMEOUT); // login ftp server if (!ftpClient.login(FTP_USERNAME, FTP_PASSWORD)) { throw new IOException("Username or password is incorrect!"); } ftpClient.setDataTimeout(FTP_TIMEOUT); System.out.println("connected"); } } catch (IOException ex) { ex.printStackTrace(); } } /** * disconnect ftp server * * @author viettuts.vn */ private void disconnectFTPServer() { if (ftpClient != null && ftpClient.isConnected()) { try { ftpClient.logout(); ftpClient.disconnect(); } catch (IOException ex) { ex.printStackTrace(); } } } }
Kết quả:
connecting ftp server... connected /demo has 7file(s) autologin_v1.jar autologin_v2.jar autologin_v3.jar index.html listfiles.xlsx
Ví dụ về get list file from FTP Server theo phần mở rộng của file
Sửa phương thức getListFileFromFTPServer() của chương trình trên như dưới đây sẽ đọc tất cả các file có phần mở rộng là ",jar" của path="\demo" trên FTP Server:
/** * get list from ftp server * * @author viettuts.vn * @param path * @return List<FTPFile> */ private List<FTPFile> getListFileFromFTPServer(String path) { List<FTPFile> listFiles = new ArrayList<FTPFile>(); // connect ftp server connectFTPServer(); try { FTPFile[] ftpFiles = ftpClient.listFiles(path, new FTPFileFilter() { public boolean accept(FTPFile file) { return file.getName().endsWith("jar"); } }); System.out.println(path + " has " + ftpFiles.length + "file(s)"); if (ftpFiles.length > 0) { for (FTPFile ftpFile : ftpFiles) { // add file to listFiles if (ftpFile.isFile()) { listFiles.add(ftpFile); } } } } catch (IOException ex) { ex.printStackTrace(); } finally { // disconnect ftp server disconnectFTPServer(); } return listFiles; }
Kết quả:
connecting ftp server... connected /demo has 3file(s) autologin_v1.jar autologin_v2.jar autologin_v3.jar