Apache FTP เป็นเครื่องมือไคลเอนต์อัพโหลด FTP ที่ใช้กันอย่างแพร่หลาย มันใช้งานง่ายมีรหัสง่ายและโครงสร้างที่ชัดเจน มันเป็นสิ่งสำคัญสำหรับซอฟต์แวร์การจัดการไคลเอนต์ไฟล์ FTP การดำเนินการ FTP รวมถึง: การอัปโหลดไฟล์ FTP (การส่งอย่างต่อเนื่องเบรกพอยต์), ดาวน์โหลดไฟล์ FTP, การเปลี่ยนชื่อไฟล์ FTP และการลบไฟล์ FTP การดำเนินการเหล่านี้แสดงให้เห็นถึงวิธีการจัดการแอปพลิเคชัน FTP อย่างเต็มที่ ดังนั้นฉันจึงใช้วิธีนี้เสมอเพื่อใช้การจัดการเซิร์ฟเวอร์ไฟล์ FTP แนบกับรหัสเครื่องมือ FTP
1. สถานะการทำงานสถานะการระบุไฟล์ FTP
แพ็คเกจ com.scengine.wtms.utils.ftp; public enum ftpstatus {file_exits (0), create_directory_success (1), create_directory_fail (2), upload_from_breat_success (3), upload_from_faild (4), download_from_break_success (5) upload_new_file_success (7), upload_new_file_failed (8), delete_remote_success (9), delete_remote_faild (10), remote_bigger_local (11), remote_smaller_local (12), not_exist_file (13), remote_rename_success (14), remote_rename_faild (15), file_not_unique (16); สถานะ int ส่วนตัว; public int getStatus () {สถานะการส่งคืน; } โมฆะสาธารณะ setStatus (สถานะ int) {this.status = สถานะ; } ftpstatus (สถานะ int) {this.status = สถานะ; - 2. รหัสเครื่องมือการทำงานของไฟล์ FTP
แพ็คเกจ com.scengine.wtms.utils.ftp; นำเข้า Java.io.File; นำเข้า Java.io.FileInputStream; นำเข้า Java.io.FileOutputStream; นำเข้า java.io.ioException; นำเข้า Java.io.InputStream; นำเข้า Java.io.OutputStream; นำเข้า Java.io.OutputStream; นำเข้า java.io.printwriter; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า org.apache.Commons.net.printCommandListener; นำเข้า org.apache.commons.net.ftp.ftp; นำเข้า org.apache.commons.net.ftp.ftpclient; นำเข้า org.apache.commons.net.ftp.ftpfile; นำเข้า org.apache.commons.net.ftp.ftpreply; นำเข้า com.scengine.wtms.utils.log; Ftputils ระดับสาธารณะ {private ftpClient ftpClient = new ftpClient (); / *** การตั้งค่าการก่อสร้างวัตถุส่งออกคำสั่งที่ใช้ในกระบวนการไปยังคอนโซล*/ ftputils สาธารณะ () {this.ftpclient.addprotocolCommandListener (PrintCommandListener ใหม่ (PrintWriter ใหม่ (System.out))); } / ** * * ใช้ในการเชื่อมต่อกับเซิร์ฟเวอร์ ftp ในการเขียนโปรแกรม Java * * @param ชื่อโฮสต์ * ชื่อโฮสต์ * * @param พอร์ต * * * * @param ชื่อผู้ใช้ * ชื่อผู้ใช้ * * @param รหัสผ่าน * @@return ว่าการเชื่อมต่อนั้นสำเร็จ * * @throws ioexception ftpclient.connect (ชื่อโฮสต์, พอร์ต); if (ftpreply.ispositiveCompletion (ftpClient.getReplyCode ())) {ถ้า (ftpClient.login (ชื่อผู้ใช้, รหัสผ่าน)) {ส่งคืนจริง; }} disconnect (); กลับเท็จ; } / ** * ลบไฟล์ ftp ระยะไกล * * @param รีโมต * พา ธ ไฟล์ระยะไกล * @return * @throws ioexception * / public ftpstatus delete (string remote) โยน ioexception {ftpclient.enterLocalPassiveMode (); ftpClient.setFileType (ftp.binary_file_type); ผลลัพธ์ ftpstatus = null; ftpfile [] files = ftpclient.listfiles (รีโมต); if (files.length == 1) {สถานะบูลีน = ftpClient.deleteFile (รีโมต); ผลลัพธ์ = สถานะ? ftpstatus.delete_remote_success: ftpstatus.delete_remote_faild; } else {result = ftpstatus.not_exist_file; } log.getLogger (this.getClass ()). info ("ตัวระบุการลบไฟล์เซิร์ฟเวอร์ FTP:"+ผลลัพธ์); ผลการกลับมา; } / ** * เปลี่ยนชื่อไฟล์ ftp ระยะไกล * * @param ชื่อ * ชื่อไฟล์รีโมตใหม่ (Path-Must รับประกันได้ว่าอยู่ภายใต้เส้นทางเดียวกัน) * * @param ระยะไกล * เส้นทางไฟล์ระยะไกล * * @return ไม่ว่าจะประสบความสำเร็จ * * @throws ioexception ftpClient.setFileType (ftp.binary_file_type); ผลลัพธ์ ftpstatus = null; ftpfile [] files = ftpclient.listfiles (รีโมต); if (files.length == 1) {สถานะบูลีน = ftpClient.rename (รีโมตชื่อ); ผลลัพธ์ = สถานะ? ftpstatus.remote_rename_success: ftpstatus.remote_rename_faild; } else {result = ftpstatus.not_exist_file; } log.getLogger (this.getClass ()). info ("FTP Server Filename Update Identifier:"+ผลลัพธ์); ผลการกลับมา; } / ** * * ดาวน์โหลดไฟล์จากเซิร์ฟเวอร์ ftp * * @param filename * ดาวน์โหลดชื่อไฟล์ (รวมถึงชื่อต่อท้าย) * * @param รีโมต * พา ธ ไฟล์ระยะไกล * * @param local local * เส้นทางไฟล์ท้องถิ่น * * @return ไม่ว่าจะประสบความสำเร็จ * * @throws ioexception * เอาท์พุทสตรีมไฟล์ป๊อปอัพการบันทึกการเลือกพา ธ การตอบกลับการตอบสนองของ PATH.SETCONTENTTYPE ("Application/Octet-Stream"); Response.setContentType ("แอปพลิเคชัน/octet-stream; charset = utf-8"); Response.SetheAder ("เนื้อหา-การจัดสรร", "สิ่งที่แนบมา; ชื่อไฟล์ =" +ชื่อไฟล์); ftpClient.EnterlocalPassiveMode (); ftpClient.setFileType (ftp.binary_file_type); ผลลัพธ์ ftpstatus; outputStream out = response.getOutputStream (); สถานะบูลีน = ftpClient.retrieveFile (ระยะไกล, ออก); ผลลัพธ์ = สถานะ? ftpstatus.download_from_break_success: ftpstatus.download_from_break_faild; log.getLogger (this.getClass ()). info ("ไฟล์ดาวน์โหลดไฟล์เซิร์ฟเวอร์ FTP:"+ผลลัพธ์); out.close (); ผลการกลับมา; } / ** * ดาวน์โหลดไฟล์จากเซิร์ฟเวอร์ ftp * * @param ระยะไกล * พา ธ ไฟล์ระยะไกล * * @param local path * local path * * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @resource ") public ftpstatus ดาวน์โหลด ftpClient.setFileType (ftp.binary_file_type); ผลลัพธ์ ftpstatus; ไฟล์ f = ไฟล์ใหม่ (local); ftpfile [] files = ftpclient.listfiles (รีโมต); if (files.length! = 1) {log.getLogger (this.getClass ()). ข้อมูล ("ไฟล์ระยะไกลไม่ซ้ำกัน"); ส่งคืน ftpstatus.file_not_unique; } long lremotesize = ไฟล์ [0] .getSize (); if (f.exists ()) {outputStream out = ใหม่ fileOutputStream (f, true); log.getLogger (this.getClass ()). ข้อมูล ("ขนาดไฟล์ท้องถิ่นคือ:" + f.length ()); if (f.length ()> = lremotesize) {log.getLogger (this.getClass ()). ข้อมูล ("ขนาดไฟล์ท้องถิ่นมากกว่าขนาดไฟล์ระยะไกลดาวน์โหลดยกเลิก"); ส่งคืน ftpstatus.remote_smaller_local; } ftpClient.setRestartOffset (f.length ()); สถานะบูลีน = ftpClient.retrieveFile (ระยะไกล, ออก); ผลลัพธ์ = สถานะ? ftpstatus.download_from_break_success: ftpstatus.download_from_break_faild; out.close (); } else {outputStream out = ใหม่ fileOutputStream (f); สถานะบูลีน = ftpClient.retrieveFile (ระยะไกล, ออก); ผลลัพธ์ = สถานะ? ftpstatus.download_from_break_success: ftpstatus.download_from_break_faild; out.close (); } ผลตอบแทนผลลัพธ์; }/** * อัปโหลดไฟล์ไปยังเซิร์ฟเวอร์ FTP รองรับการส่งสัญญาณอย่างต่อเนื่อง * * @param Local Local * ชื่อไฟล์ท้องถิ่นเส้นทางสัมบูรณ์ * * @param ระยะไกล * พา ธ ไฟล์ระยะไกลใช้/home/directory1/subdirectory/file.ext * ผลลัพธ์ * * @throws ioexception */ @suppresswarnings ("ทรัพยากร") การอัปโหลด ftpstatus สาธารณะ (สตริงโลคัล, สตริงรีโมท) พ่น ioexception {// ตั้งค่า passivemode เพื่อส่ง ftpclient.enterlocalpassivemode (); // ตั้งค่าเพื่อส่ง ftpclient.setFileType (ftp.binary_file_type); ผลลัพธ์ ftpstatus; // จัดการไดเรกทอรีระยะไกลสตริงระยะไกล fileName = ระยะไกล; if (remote.contains ("/")) {remotefilename = remote.substring (remote.lastindexof ("/") + 1); String directory = remote.substring (0, Remote.AlastIndexof ("/") + 1); if (! directory.equalsignorecase ("/") &&! ftpClient.changeWorkingDirectory (ไดเรกทอรี)) {// ถ้าไดเรกทอรีระยะไกลไม่มีอยู่ให้สร้างไดเรกทอรีเซิร์ฟเวอร์ระยะไกล start = 0; int end = 0; if (directory.startswith ("/"))) {start = 1; } else {start = 0; } end = directory.indexof ("/", เริ่มต้น); ในขณะที่ (จริง) {String Subdirectory = Remote.SubString (start, end); if (! ftpClient.changeWorkingDirectory (ไดเรกทอรีย่อย)) {ถ้า (ftpClient.makedirectory (ไดเรกทอรีย่อย)) {ftpClient.changeWorkingDirectory (ไดเรกทอรีย่อย); } else {log.getLogger (this.getClass ()). ข้อมูล ("สร้างไดเรกทอรีล้มเหลว"); ส่งคืน ftpstatus.create_directory_fail; }} start = end + 1; end = directory.indexof ("/" เริ่มต้น); // ตรวจสอบว่าไดเรกทอรีทั้งหมดถูกสร้างขึ้นหรือไม่ถ้า (สิ้นสุด <= เริ่มต้น) {break; }}}}} // ตรวจสอบว่ามีไฟล์ระยะไกล ftpfile [] files = ftpClient.listFiles (RemoteFileName); if (files.length == 1) {remotesize ยาว = ไฟล์ [0] .getSize (); ไฟล์ f = ไฟล์ใหม่ (local); localsize ยาว = f.length (); if (remotesize == localsize) {return ftpstatus.file_exits; } else if (remotesize> localsize) {return ftpstatus.remote_bigger_local; } // ลองย้ายตัวชี้ในไฟล์เพื่อรับรู้ถึงการหยุดชะงักของเบรกพอยต์อินพุต IS = ใหม่ FileInputStream (F); if (is.skip (remotesize) == remotesize) {ftpClient.setRestartOffset (remotesize); if (ftpClient.storeFile (รีโมต, IS)) {ส่งคืน ftpstatus.upload_from_break_success; }} // หากเบรกพอยต์ยังคงผ่านไม่สำเร็จให้ลบไฟล์บนเซิร์ฟเวอร์และอัปโหลดอีกครั้งถ้า (! ftpClient.deleteFile (remotefilename)) {ส่งคืน ftpstatus.delete_remote_faild; } คือ = ใหม่ FileInputStream (F); if (ftpClient.storeFile (รีโมต, คือ)) {result = ftpstatus.upload_new_file_success; } else {result = ftpstatus.upload_new_file_failed; } is.close (); } else {inputStream คือ = new FileInputStream (local); if (ftpClient.storeFile (remotefilename, IS)) {result = ftpstatus.upload_new_file_success; } else {result = ftpstatus.upload_new_file_failed; } is.close (); } ผลตอบแทนผลลัพธ์; } / ** * * ยกเลิกการเชื่อมต่อจากเซิร์ฟเวอร์ระยะไกล * * @throws ioexception * / โมฆะสาธารณะ disconnect () พ่น IOException {ถ้า (ftpClient.isconnected ()) {ftpClient.disconnect (); }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ftputils myftp = new ftputils (); ลอง {myftp.connect ("192.168.1.200", 21, "duser", "htpduserxp32"); log.getLogger (ftputils.class) .info (myftp.upload ("c: //users//administrator//desktop//swing.drawer.jar", "/jars/swing.drawer.jar")); myftp.disconnect (); } catch (ioexception e) {log.getLogger (ftputils.class) .info ("ftp อัปโหลดไฟล์ยกเว้น:" + e.getMessage ()); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น