我用的FTPClient是由Apache組織的commons-net.jar包中的API,這個包用起來非常的方便,很容易上手。我在項目開發的過程中主要用到了文件的上傳和下載功能,下面將我開發的代碼貼出來供大家學習:
文件上傳到文件服務器:在該部分內我遇到的主要問題上文件名亂碼,word文檔內容亂碼,解決辦法在代碼中已經注釋了,希望可以幫助到大家。
1 /** 2 * 上傳部分代碼如下: 3 * @param url:文件服務器主機地址 4 * @param port:文件服務器端口號 5 * @param username:用戶名 6 * @param password:密碼 7 * @param path:文件要保存的路徑 8 * @param filename:文件名字 9 * @param input:文件輸入流,即從本地服務器讀取文件的IO輸入流 10 * @return 11 */ 12 public static boolean uploadToFTPServer(String url,int port,String username,String password,String path,String filename,InputStream input) 13 { 14 boolean success = false; //判斷文件是否上傳成功 15 FTPClient ftp = new FTPClient(); //創建一個客戶端實例 16 try { 17 int reply; 18 ftp.connect(url, port);//連接FTP服務器 19 //如果采用默認端口,可以使用ftp.connect(url)的方式直接連接FTP服務器 20 ftp.login(username, password);//登錄 21 reply = ftp.getReplyCode(); //獲得返回的代碼,來判斷連接狀態 22 23 if (!FTPReply.isPositiveCompletion(reply)) { 24 ftp.disconnect(); 25 return success; 26 } 27 // ftp.makeDirectory("bbb");//創建文件目錄 28 ftp.changeWorkingDirectory(path); 29 ftp.setFileType(FTP.BINARY_FILE_TYPE);//設置文件以二進制的形式上傳,防止文件內容亂碼出現 30 //設置文件名字的編碼格式為iso-8859-1,因為FTP上傳的時候默認編碼為iso-8859-1,解決文件名字亂碼的問題 31 filename = new String(filename.getBytes("GBK"),"iso-8859-1"); 32 ftp.storeFile(filename, input); //開始上傳文件 33 input.close();//關閉文件輸入流 34 ftp.logout();//斷開和ftp服務器之間的連接 35 success = true; 36 } catch (IOException e) { 37 e.printStackTrace(); 38 } finally { 39 if (ftp.isConnected()) { 40 try { 41 ftp.disconnect(); 42 } 43 catch (IOException ioe) { 44 } 45 } 46 } 47 return success; 48 49 }
從文件服務器下載文件:
1 public static void downloadFromFileServer(String url,int port,String username,String password,String path,HttpServletRequest request, HttpServletResponse response) throws SocketException, IOException 2 { 3 //boolean success = false; //判斷文件是否上傳成功 4 FTPClient ftp = new FTPClient(); //創建一個客戶端實例 5 6 ftp.connect(url, port);//連接FTP服務器 7 //如果采用默認端口,可以使用ftp.connect(url)的方式直接連接FTP服務器 8 ftp.login(username, password);//登錄 9 int reply = ftp.getReplyCode(); //獲得返回的代碼,來判斷連接狀態 10 ftp.changeWorkingDirectory("bbb");//轉移到FTP服務器目錄 11 if (!FTPReply.isPositiveCompletion(reply)) { 12 ftp.disconnect(); 13 } 14 //File localFile = new File(request.getServletContext().getRealPath("/upload/")+"12345678.doc"); 15 //OutputStream is = new FileOutputStream(localFile); 16 // ftp.retrieveFile("1234.doc", is); 17 18 19 FTPFile[] fs = ftp.listFiles(); 20 21 for(FTPFile ff:fs){ 22 if(ff.getName().equals("abc.txt")){//如果找到abc.txt則進行下載 ,可以自己設置要下載的文件名稱 23 //設置要下載到的目錄 24 File localFile = new File(request.getServletContext().getRealPath("/upload")+"/12345678.doc"); 25 //得到輸出流 26 OutputStream is = new FileOutputStream(localFile); 27 ftp.retrieveFile(ff.getName(), is); //開始下載文件 28 is.close(); 29 } 30 } 31 32 ftp.logout(); 33 } 34 }
以上即為我在使用FTPClient進行文件的上傳和下載部分的代碼,記錄下來以便我日后學習。