FTP 是File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用於Internet上的控製文件的雙向傳輸。同時,它也是一個應用程序(Application)。基於不同的操作系統有不同的FTP應用程序,而所有這些應用程序都遵守同一種協議以傳輸文件。在FTP的使用當中,用戶經常遇到兩個概念:"下載"(Download)和"上傳"(Upload)。 "下載"文件就是從遠程主機拷貝文件至自己的計算機上;"上傳"文件就是將文件從自己的計算機中拷貝至遠程主機上。用Internet語言來說,用戶可通過客戶機程序向(從)遠程主機上傳(下載)文件。
首先下載了Serv-U將自己的電腦設置為了FTP文件服務器,方便操作。
1.FTP文件的下載(從FTP服務器下載到本機)
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import org.apache.commons.net.ftp.FTP;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPFile;import org.apache.commons.net.ftp.FTPReply;public class FtpApche {private static FTPClient ftpClient = new FTPClient();private static String encoding = System.getProperty("file.encoding");/*** Description: 從FTP服務器下載文件* * @Version1.0* @param url* FTP服務器hostname* @param port* FTP服務器端口* @param username* FTP登錄賬號* @param password* FTP登錄密碼* @param remotePath* FTP服務器上的相對路徑* @param fileName* 要下載的文件名* @param localPath* 下載後保存到本地的路徑* @return*/public static boolean downFile(String url, int port, String username,String password, String remotePath, String fileName,String localPath) {boolean result = false;try {int reply;ftpClient.setControlEncoding(encoding);/** 為了上傳和下載中文文件,有些地方建議使用以下兩句代替* new String(remotePath.getBytes(encoding),"iso-8859-1")轉碼。 * 經過測試,通不過。 */// FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);// conf.setServerLanguageCode("zh");ftpClient.connect(url, port);// 如果採用默認端口,可以使用ftp.connect(url)的方式直接連接FTP服務器ftpClient.login(username, password);// 登錄// 設置文件傳輸類型為二進制ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);// 獲取ftp登錄應答代碼reply = ftpClient.getReplyCode();// 驗證是否登陸成功if (!FTPReply.isPositiveCompletion(reply)) {ftpClient.disconnect();System.err.println("FTP server refused connection.");return result;}// 轉移到FTP服務器目錄至指定的目錄下ftpClient.changeWorkingDirectory(new String(remotePath.getBytes(encoding),"iso-8859-1"));// 獲取文件列表FTPFile[] fs = ftpClient.listFiles();for (FTPFile ff : fs) {if (ff.getName().equals(fileName)) {File localFile = new File(localPath + "/" + ff.getName());OutputStream is = new FileOutputStream(localFile);ftpClient.retrieveFile(ff.getName(), is);is.close();}}ftpClient.logout();result = true;} catch (IOException e) {e.printStackTrace();} finally {if (ftpClient.isConnected()) {try {ftpClient.disconnect();} catch (IOException ioe) {}}}return result;}/*** 將FTP服務器上文件下載到本地* */public void testDownFile() {try {boolean flag = downFile("10.0.0.102", 21, "admin","123456", "/", "ip.txt", "E:/");System.out.println(flag);} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {FtpApche fa = new FtpApche();fa.testDownFile();}}2.FTP文件的上傳(從本機上傳到FTP服務器)
import java.io.File;import java.io.FileInputStream;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPReply;public class FTPTest_05 {private FTPClient ftp;/** * * @param path 上傳到ftp服務器哪個路徑下* @param addr 地址* @param port 端口號* @param username 用戶名* @param password 密碼* @return * @throws Exception */ private boolean connect(String path,String addr,int port,String username,String password) throws Exception {boolean result = false;ftp = new FTPClient();int reply;ftp.connect(addr,port);ftp.login(username,password);ftp.setFileType(FTPClient.BINARY_FILE_TYPE);reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();return result;}ftp.changeWorkingDirectory(path);result = true;return result;}/** * * @param file 上傳的文件或文件夾* @throws Exception */ private void upload(File file) throws Exception{if(file.isDirectory()){ftp.makeDirectory(file.getName());ftp.changeWorkingDirectory(file.getName());String[] files = file.list();for (int i = 0;i < files.length;i++) {File file1 = new File(file.getPath()+"//"+files[i] );if(file1.isDirectory()){upload(file1);ftp.changeToParentDirectory();}else{File file2 = new File(file.getPath()+"//"+files[i]);FileInputStream input = new FileInputStream(file2);ftp.storeFile(file2.getName(), input);input.close();}}}else{File file2 = new File(file.getPath());FileInputStream input = new FileInputStream(file2);ftp.storeFile(file2.getName(), input);input.close();}}public static void main(String[] args) throws Exception{FTPTest_05 t = new FTPTest_05();boolean connFlag = t.connect("/", "10.0.0.105", 21, "ls", "123456");System.out.println("connFlag : " + connFlag);File file = new File("D://test02");//本機被傳文件的地址System.out.println("file : " + file);t.upload(file);System.out.println("upload : " + "ok");}}以上所述是小編給大家介紹的Java實現FTP文件的上傳和下載功能的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!