ขึ้นอยู่กับ Apache FTP ปัญหาต่อไปนี้จะต้องพิจารณาเมื่ออัปโหลดไฟล์ (ตัวอย่างคือฟังก์ชั่นต่อเนื่อง):
(1) เซิร์ฟเวอร์ FTP มีการเปลี่ยนแปลงไดเรกทอรีหรือไม่หากไม่มีอยู่คุณจะต้องสร้างไดเรกทอรี
(2) พิจารณาว่าไฟล์ที่อัปโหลดมีอยู่แล้วหรือไม่ หากมีอยู่จะต้องถูกลบก่อนที่จะอัปโหลดหรือส่งต่ออย่างต่อเนื่อง
1. อัปโหลดหรือดาวน์โหลดคลาสการแจงนับ:
แพ็คเกจ com.scengine.wtms.utils.ftp; enum public uploadstatus {file_exits (0), create_directory_success (1), create_directory_fail (2), upload_from_breat_success (3), upload_from_faild (4), download_from_breat_success upload_new_file_success (7), upload_new_file_failed (8), delete_remote_success (9), delete_remote_faild (10), remote_bigger_local (11), remote_smaller_locall (12); สถานะ int ส่วนตัว; public int getStatus () {สถานะการส่งคืน; } โมฆะสาธารณะ setStatus (สถานะ int) {this.status = สถานะ; } UploadStatus (สถานะ int) {this.status = สถานะ; -2. รหัสเครื่องมือ:
แพ็คเกจ 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.printwriter; นำเข้า 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; คลาสสาธารณะ Exintionftp {private ftpClient ftpClient = new ftpClient (); / *** การตั้งค่าการก่อสร้างวัตถุส่งออกคำสั่งที่ใช้ในกระบวนการไปยังคอนโซล*/ สาธารณะต่อไป () {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 ระยะไกล * พา ธ ไฟล์ระยะไกล * * @param local local * เส้นทางไฟล์ท้องถิ่น * * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @resource ") การดาวน์โหลดบูลีนสาธารณะ ftpClient.setFileType (ftp.binary_file_type); ผลลัพธ์บูลีน; ไฟล์ f = ไฟล์ใหม่ (local); ftpfile [] files = ftpclient.listfiles (รีโมต); if (files.length! = 1) {system.out.println ("ไฟล์ระยะไกลไม่ซ้ำ"); กลับเท็จ; } long lremotesize = ไฟล์ [0] .getSize (); if (f.exists ()) {outputStream out = ใหม่ fileOutputStream (f, true); System.out.println ("ขนาดไฟล์ท้องถิ่นคือ:" + f.length ()); if (f.length ()> = lremotesize) {system.out.println ("ขนาดไฟล์ท้องถิ่นมากกว่าขนาดไฟล์ระยะไกลดาวน์โหลดยกเลิก"); กลับเท็จ; } ftpClient.setRestartOffset (f.length ()); ผลลัพธ์ = ftpClient.retrieveFile (ระยะไกล, ออก); out.close (); } else {outputStream out = ใหม่ fileOutputStream (f); ผลลัพธ์ = ftpClient.retrieveFile (ระยะไกล, ออก); out.close (); } ผลตอบแทนผลลัพธ์; }/** * * อัปโหลดไฟล์ไปยังเซิร์ฟเวอร์ FTP รองรับการส่งสัญญาณอย่างต่อเนื่อง * * @param ชื่อไฟล์ท้องถิ่น * ชื่อไฟล์สัมบูรณ์ * * @param ระยะไกล * พา ธ ไฟล์ระยะไกล, ใช้/home/directory1/subdirectory/file.ext * @throws ioexception */ @suppresswarnings ("ทรัพยากร") อัปโหลดสาธารณะอัพโหลด (สตริงโลคัล, สตริงรีโมท) พ่น IOException {// ตั้งค่า passiveMode เพื่อส่ง ftpClient.enterLocalPassiveMode (); // ตั้งค่า ftpclient.setFileType (ftp.binary_file_type); ผลลัพธ์ของ Uploadstatus; // การประมวลผลของไดเรกทอรีระยะไกลสตริงระยะไกล fileName = ระยะไกล; if (remote.contains ("/")) {remotefilename = remote.substring (remote.lastindexof ("/") + 1); String directory = remote.substring (0, Remote.AlastIndexof ("/") + 1); if (! directory.equalsignorecase ("/") &&! ftpClient.changeWorkingDirectory (ไดเรกทอรี)) {// ถ้าไดเรกทอรีระยะไกลไม่มีอยู่ให้สร้างไดเรกทอรีเซิร์ฟเวอร์ระยะไกลเริ่มต้น int เริ่มต้น = 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 {system.out.println ("สร้างล้มเหลวในการสร้างไดเรกทอรี"); return uploadstatus.create_directory_fail; }} start = end + 1; end = directory.indexof ("/" เริ่มต้น); // ตรวจสอบว่าไดเรกทอรีทั้งหมดถูกสร้างขึ้นหรือไม่ถ้า (สิ้นสุด <= เริ่มต้น) {break; }}}} // ตรวจสอบว่าไฟล์มีอยู่ในไฟล์ ftpfile [] fils = ftpClient.listFiles (RemoteFileName); if (files.length == 1) {remotesize ยาว = ไฟล์ [0] .getSize (); ไฟล์ f = ไฟล์ใหม่ (local); localsize ยาว = f.length (); if (remotesize == localsize) {return uploadstatus.file_exits; } อื่นถ้า (remotesize> localsize) {return uploadstatus.remote_bigger_local; } // ลองย้ายตัวชี้ในไฟล์เพื่อรับรู้ถึงการหยุดชะงักของเบรกพอยต์อินพุต IS = ใหม่ FileInputStream (F); if (is.skip (remotesize) == remotesize) {ftpClient.setRestartOffset (remotesize); if (ftpClient.storeFile (รีโมต, คือ)) {return uploadstatus.upload_from_break_success; }} // หากการหยุดชะงักของเบรกพอยต์ไม่สำเร็จให้ลบไฟล์บนเซิร์ฟเวอร์และอัปโหลดอีกครั้งถ้า (! ftpClient.deleteFile (RemoteFileName)) {return uploadstatus.delete_remote_faild; } คือ = ใหม่ FileInputStream (F); if (ftpClient.storeFile (รีโมต, คือ)) {result = uploadStatus.upload_new_file_success; } else {result = uploadstatus.upload_new_file_failed; } is.close (); } else {inputStream คือ = new FileInputStream (local); if (ftpClient.storeFile (RemoteFileName, IS)) {result = uploadStatus.upload_new_file_success; } else {result = uploadstatus.upload_new_file_failed; } is.close (); } ผลตอบแทนผลลัพธ์; } / ** * * ยกเลิกการเชื่อมต่อจากเซิร์ฟเวอร์ระยะไกล * * @throws ioexception * / โมฆะสาธารณะ disconnect () พ่น IOException {ถ้า (ftpClient.isconnected ()) {ftpClient.disconnect (); }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {Exintionftp myftp = new extinceftp (); ลอง {myftp.connect ("192.168.1.200", 21, "duser", "htpduserxp32"); System.out.println (myftp.upload ("c: //users//administrator//desktop//swing.drawer.jar", "/jars/swing.drawer.jar")); myftp.disconnect (); } catch (ioexception e) {system.out.println ("ข้อผิดพลาดการเชื่อมต่อกับ ftp:" + e.getMessage ()); - ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น