ในการพัฒนาโปรแกรม Java FTP จะใช้บ่อยขึ้นและมักจะเกี่ยวข้องกับมันเช่นการอัปโหลดและดาวน์โหลดไฟล์ไปยังเซิร์ฟเวอร์ FTP บทความนี้แนะนำวิธีการใช้ FTPClient ในจาการ์ตาคอมมอนส์ (ในแพ็คเกจ Commons-Net) เพื่ออัปโหลดและดาวน์โหลดไฟล์
1. อัปโหลดไฟล์
ฉันจะไม่แนะนำหลักการโปรดอ่านรหัสโดยตรง
/** * คำอธิบาย: อัปโหลดไฟล์ไปยังเซิร์ฟเวอร์ ftp * @ @version1.0 27 ก.ค. 2008 4:31:09 PM โดย cui hongbao ([email protected]) สร้าง * @param url ftp server ftp server ไดเรกทอรี * @param filename อัปโหลดไปยังเซิร์ฟเวอร์ FTP * @param อินพุตอินพุตอินพุต * @return return true สำเร็จไม่เช่นนั้นส่งคืน false */ publicstaticboolean uploadfile (url สตริง, พอร์ต int, ชื่อผู้ใช้สตริง, สตริง, เส้นทางสตริง, สตริงไฟล์ ftpClient ftp = new ftpClient (); ลอง {int ตอบกลับ; ftp.connect (url, พอร์ต); // เชื่อมต่อเซิร์ฟเวอร์ FTP // หากใช้พอร์ตเริ่มต้นคุณสามารถเชื่อมต่อโดยตรงกับเซิร์ฟเวอร์ FTP โดยใช้ ftp.connect (URL); ftp.login (ชื่อผู้ใช้, รหัสผ่าน); // การตอบกลับเข้าสู่ระบบ = ftp.getReplyCode (); if (! ftpreply.ispositiveCompletion (ตอบกลับ)) {ftp.disconnect (); กลับมาประสบความสำเร็จ } ftp.changeworkingDirectory (เส้นทาง); ftp.storefile (ชื่อไฟล์, อินพุต); input.close (); ftp.logout (); ความสำเร็จ = จริง; } catch (ioexception e) {e.printstacktrace (); } ในที่สุด {if (ftp.isconnected ()) {ลอง {ftp.disconnect (); } catch (ioexception ioe) {}}} คืนความสำเร็จ; } < /pre> </pre> /*** คำอธิบาย: อัปโหลดไฟล์ไปยังเซิร์ฟเวอร์ ftp* @ @version1.0 27 ก.ค. 2008 4:31:09 PM โดย cui hongbao ([email protected]) สร้าง* @param url url ftp servernest @Param Path FTP Server Directory* @param filename อัปโหลดไปยังเซิร์ฟเวอร์ ftp* @param อินพุตอินพุตอินพุต* @return ส่งคืนจริงสำเร็จไม่เช่นนั้นกลับ false*/public boolean boolean uploadfile (url string url, int พอร์ต, สตริงผู้ใช้, สตริง ตอบกลับ; ftp.connect (url, พอร์ต); // เชื่อมต่อเซิร์ฟเวอร์ ftp // หากใช้พอร์ตเริ่มต้นคุณสามารถเชื่อมต่อโดยตรงกับเซิร์ฟเวอร์ ftp โดยใช้ ftp.connect (url); ftp.login (ชื่อผู้ใช้รหัสผ่าน); {ftp.disconnect (); return success;} ftp.changeworkingDirectory (PATH); ftp.storefile (ชื่อไฟล์, อินพุต); input.close (); ftp.logout (); success = true;} catch (ioexception e) {e.printstacktrace ();} ในที่สุด {ถ้า (ftp.isconnected ()) {ลอง {ftp.disconnect ();
มาเขียนสองตัวอย่างเล็ก ๆ กัน:
1. อัปโหลดไฟล์โลคัลไปยังเซิร์ฟเวอร์ FTP รหัสมีดังนี้:
@Test PublicVoid TestupLoadFromDisk () {ลอง {FileInputStream ใน = ใหม่ FileInputStream (ไฟล์ใหม่ ("d: /test.txt")); Boolean Flag = UploadFile ("127.0.0.1", 21, "ทดสอบ", "ทดสอบ", "d:/ftp", "test.txt", ใน); System.out.println (Flag); } catch (filenotfoundException e) {e.printStackTrace (); }} <pre> </pre> @testpublic เป็นโมฆะ testuploadFromDisk () {ลอง {fileInputStream ใน = ใหม่ FileInputStream (ไฟล์ใหม่ ("D: /test.txt ใน); System.out.println (Flag);} catch (filenotfoundexception e) {e.printstacktrace ();}} 2. สร้างไฟล์บนเซิร์ฟเวอร์ FTP และเขียนสตริงลงในไฟล์
@Test PublicVoid TestupLoadFromString () {ลอง {inputStream input = new ByteArrayInputStream ("ทดสอบ ftp" .getBytes ("UTF-8")); Boolean Flag = UploadFile ("127.0.0.1", 21, "ทดสอบ", "ทดสอบ", "d:/ftp", "test.txt", อินพุต); System.out.println (Flag); } catch (unsupportencodingexception e) {e.printstacktrace (); }} <pre> </pre> @TestPublic เป็นโมฆะ testuploadFromString () {ลอง {อินพุตอินพุต = new ByteArrayInputStream ("ทดสอบ ftp" .getBytes ("UTF-8")) การทดสอบ "การทดสอบ" อินพุต); System.out.println (Flag);} catch (unsupportencodingexception e) {e.printstacktrace ();}} 2. ดาวน์โหลดไฟล์
รหัสสำหรับการดาวน์โหลดไฟล์จากเซิร์ฟเวอร์ FTP นั้นง่ายมากโปรดดูดังนี้:
/*** คำอธิบาย: ดาวน์โหลดไฟล์จากเซิร์ฟเวอร์ ftp* @version ก.ค. , :: PM โดย CUI Hongbao ([email protected]) สร้าง* @param url ftp เซิร์ฟเวอร์ชื่อโฮสต์* @param พอร์ตพอร์ตเซิร์ฟเวอร์ ftp เซิร์ฟเวอร์* @param ชื่อผู้ใช้ ftp login* @param password ftp passwate ftp passwate ท้องถิ่นหลังจากดาวน์โหลด * @return */ publicstaticboolean downfile (url สตริง, พอร์ต int, สตริงชื่อผู้ใช้, รหัสผ่านสตริง, สตริง remotepath, ชื่อไฟล์สตริง, สตริง localpath) {boolean success = false; ftpClient ftp = new ftpClient (); ลอง {int ตอบกลับ; ftp.connect (url, พอร์ต); // หากใช้พอร์ตเริ่มต้นคุณสามารถเชื่อมต่อโดยตรงกับเซิร์ฟเวอร์ FTP โดยใช้ ftp.connect (URL); ftp.login (ชื่อผู้ใช้, รหัสผ่าน); // การตอบกลับเข้าสู่ระบบ = ftp.getReplyCode (); if (! ftpreply.ispositiveCompletion (ตอบกลับ)) {ftp.disconnect (); กลับมาประสบความสำเร็จ } ftp.changeworkingDirectory (remotepath); // โอนไปยังไดเรกทอรีเซิร์ฟเวอร์ ftp ftpfile [] fs = ftp.listfiles (); สำหรับ (ftpfile ff: fs) {ถ้า (ff.getName (). เท่ากับ (ชื่อไฟล์)) {ไฟล์ localfile = ไฟล์ใหม่ (localPath+"/"+ff.getName ()); OutputStream คือ = ใหม่ fileOutputStream (localFile); ftp.retrievefile (ff.getName (), IS); is.close (); }} ftp.logout (); ความสำเร็จ = จริง; } catch (ioexception e) {e.printstacktrace (); } ในที่สุด {if (ftp.isconnected ()) {ลอง {ftp.disconnect (); } catch (ioexception ioe) {}}} คืนความสำเร็จ; } <fre> </pre>