在 Java 應用程式中實現 FTP(檔案傳輸協定)功能,主要包含三大核心操作:列出伺服器檔案清單、從伺服器下載檔案、以及上傳檔案至伺服器。本文將詳細解析這三項功能的實作方式,並提供完整的程式碼範例供參考。
開始撰寫程式碼前,請務必在專案中匯入以下兩個核心函式庫:
import sun.net.*;import sun.net.ftp.*;這些套件提供了 FtpClient 類別,是實現 FTP 連線與操作的基礎。
此功能讓使用者輸入伺服器 IP、帳號、密碼與路徑,連線成功後顯示該目錄下的所有檔案。
void ftpList_actionPerformed(ActionEvent e) {
String server = serverEdit.getText(); // FTP 伺服器 IP 位址
String user = userEdit.getText(); // 登入帳號
String password = passwordEdit.getText(); // 登入密碼
String path = pathEdit.getText(); // 伺服器路徑
try {
FtpClient ftpClient = new FtpClient(); // 建立 FtpClient 物件
ftpClient.openServer(server); // 連線至 FTP 伺服器
ftpClient.login(user, password); // 登入驗證
if (path.length() != 0) {
ftpClient.cd(path); // 切換至指定目錄
}
TelnetInputStream is = ftpClient.list(); // 取得檔案清單串流
int c;
while ((c = is.read()) != -1) {
System.out.print((char) c); // 輸出檔案清單
}
is.close();
ftpClient.closeServer(); // 關閉連線
} catch (IOException ex) {
// 錯誤處理邏輯
}
}
下載功能需指定遠端檔名,程式會將檔案以二進位模式讀取並寫入本地端同名檔案。
void getButton_actionPerformed(ActionEvent e) {
String server = serverEdit.getText();
String user = userEdit.getText();
String password = passwordEdit.getText();
String path = pathEdit.getText();
String filename = filenameEdit.getText(); // 要下載的檔名
try {
FtpClient ftpClient = new FtpClient();
ftpClient.openServer(server);
ftpClient.login(user, password);
if (path.length() != 0) {
ftpClient.cd(path);
}
ftpClient.binary(); // 設定二進位傳輸模式
TelnetInputStream is = ftpClient.get(filename); // 取得遠端檔案輸入串流
File file_out = new File(filename);
FileOutputStream os = new FileOutputStream(file_out);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c); // 寫入本地檔案
}
is.close();
os.close();
ftpClient.closeServer();
} catch (IOException ex) {
// 錯誤處理邏輯
}
}
上傳邏輯與下載對稱,讀取本地檔案並透過 FTP 串流寫入伺服器。
void putButton_actionPerformed(ActionEvent e) {
String server = serverEdit.getText();
String user = userEdit.getText();
String password = passwordEdit.getText();
String path = pathEdit.getText();
String filename = filenameEdit.getText(); // 要上傳的檔名
try {
FtpClient ftpClient = new FtpClient();
ftpClient.openServer(server);
ftpClient.login(user, password);
if (path.length() != 0) {
ftpClient.cd(path);
}
ftpClient.binary(); // 設定二進位傳輸模式
TelnetOutputStream os = ftpClient.put(filename); // 取得遠端檔案輸出串流
File file_in = new File(filename);
FileInputStream is = new FileInputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c); // 上傳檔案內容
}
is.close();
os.close();
ftpClient.closeServer();
} catch (IOException ex) {
// 錯誤處理邏輯
}
}
binary() 確保二進位檔案(圖片、執行檔等)不受損IOException 做完善的錯誤記錄與使用者提示掌握這三個核心功能,即可在 Java 應用程式中完整實現 FTP 檔案管理需求。實際專案中建議進一步封裝為工具類,並加入連線池、重試機制與進度監聽等進階功能。