บทความนี้ส่วนใหญ่แนะนำวิธีการใช้เครื่องมือ FTP ที่จัดทำโดย Apache Toolset Commons-Net เพื่ออัปโหลดและดาวน์โหลดไฟล์ไปยังเซิร์ฟเวอร์ FTP
1. การเตรียม
จำเป็นต้องอ้างอิงแพ็คเกจ Commons-Net-3.5.jar
นำเข้าโดยใช้ Maven:
<Ederency> <roupId> Commons-Net </groupId> <ratifactId> Commons-Net </artifactId> <version> 3.5 </Serve> </perdency>
ดาวน์โหลดด้วยตนเอง:
//www.vevb.com/softs/550085.html
2. เชื่อมต่อกับเซิร์ฟเวอร์ FTP
/** * เชื่อมต่อกับเซิร์ฟเวอร์ ftp * @throws ioexception */สตริงสุดท้ายคงที่สาธารณะ anonymous_user = "anonymous"; ftpclient private ftpClient Connect () {ftpClient client = new ftpClient (); ลอง {// เชื่อมต่อ ftp serverclient.connect if (this.user == null || "". equals (this.user)) {// เข้าสู่ระบบใน client.login (anonymous_user, anonymous_user);} else {client.login (this.user, this.password); ตอบกลับ int ตอบ = client.getReplyCode (); ถ้า (! ftpreply.ispositiveCompletion (ตอบกลับ)) {client.disconnect (); return null;} // สลับไดเรกทอรีการทำงาน DurnesWorkingDirectory (ไคลเอนต์); system.out.println ( null;} return client;}/*** สลับไดเรกทอรีการทำงาน เมื่อไม่มีไดเรกทอรีระยะไกลให้สร้างไดเรกทอรี * @param ไคลเอนต์ * @throws ioexception */โมฆะส่วนตัว ChangeworkingDirectory (ไคลเอนต์ ftpClient) พ่น IOException {ถ้า (this.ftppath! = null &&! " client.changeworkingDirectory (this.ftppath); if (! ok) {// ftppath ไม่มีอยู่ให้สร้างไดเรกทอรีด้วยตนเอง StringTokenizer Token = New StringTokenizer (this.ftppath, "/////"); token.nexttoken (); client.makedirectory (path); client.changeworkingDirectory (เส้นทาง);}}}}}/** * ตัดการเชื่อมต่อ FTP * @param ftpClient * @throws ioexception */โมฆะสาธารณะ ftpClient.isconnected ()) {ftpClient.logout (); ftpClient.disconnect ();} system.out.println ("!!! การเชื่อมต่อ disconnectft:"+โฮสต์+":"+พอร์ต);}; โฮสต์: ที่อยู่ IP ของเซิร์ฟเวอร์ FTP
พอร์ต: พอร์ตเซิร์ฟเวอร์ FTP
ผู้ใช้: ผู้ใช้เข้าสู่ระบบ
รหัสผ่าน: เมื่อรหัสผ่านเข้าสู่ระบบว่างเปล่าให้ใช้ผู้ใช้ที่ไม่ระบุชื่อเพื่อเข้าสู่ระบบ
FTPPATH: เส้นทาง FTP สร้างขึ้นโดยอัตโนมัติเมื่อไม่มีเส้นทาง FTP หากเป็นโครงสร้างไดเรกทอรีหลายชั้นจำเป็นต้องสร้างไดเรกทอรีซ้ำ ๆ
3. อัปโหลดไฟล์
/*** อัปโหลดไฟล์* @param targetName อัปโหลดไปยังชื่อไฟล์ ftp* @param localfile พา ธ ไฟล์ท้องถิ่น* @return*/การอัปโหลดบูลีนสาธารณะ (สตริง targetName, สตริง localfile) {// เชื่อมต่อ ftp serverftpclient ftpclient = เชื่อมต่อ () (ftpClient == null) เซิร์ฟเวอร์ ["+โฮสต์+": "+พอร์ต+"] ล้มเหลว! "); ส่งคืนไฟล์ false;} ไฟล์ = ไฟล์ใหม่ (localfile); // ตั้งชื่อไฟล์หลังจากอัปโหลดถ้า (targetName == null ||" "เท่ากับ (targetName)) targetName = file.getName (); ใหม่ FileInputStream (ไฟล์); System.out.println (">>> เริ่มอัปโหลดไฟล์:"+file.getName ()); บูลีนตกลง = ftpClient.storeFile (targetName, fis); ถ้า (ตกลง) {// อัปโหลดนานแล้ว ขนาด: %s, เวลาอัปโหลด: %d วินาที ", formatsize (file.length ()), times/1000));} else // อัปโหลด system.out.out.println (String.format (" >>> อัปโหลดล้มเหลว: ขนาด: %s ", formatsize ล้มเหลว: ขนาด: %s ", formatsize (file.length ())))); e.printstacktrace (); return false;} ในที่สุด {ลอง {ถ้า (fis! = null) fis.close (); ปิด (ftpClient);4. ดาวน์โหลดไฟล์
/*** ดาวน์โหลดไฟล์* @param localpath local Storage Path* @return*/public int ดาวน์โหลด (สตริง localpath) {// เชื่อมต่อกับ ftp serverftpclient ftpclient = connect (); ถ้า (ftpclient == null) {system.out.println ("เชื่อมต่อกับเซิร์ฟเวอร์ ftp ["+โฮสต์+" ไฟล์ (localpath); ถ้า (! dir.exists ()) dir.mkdirs (); ftpfile [] ftpfiles = null; ลอง {ftpfiles = ftpClient.listfiles () ถ้า (ftpfiles == null || ftpfiles.length == 0) i = 0; i <ftpfiles.length; i ++) {fileOutputStream fos = null; ลอง {ชื่อสตริง = ftpfiles [i] .getName (); fos = new fileOutputStream (ไฟล์ใหม่ (dir.getAbsolutePath ()+ไฟล์ Long Now = system.currentTimeMillis (); boolean ok = ftpClient.retrieveFile (สตริงใหม่ (name.getBytes ("UTF-8"), "iso-8859-1"), fos); ถ้า (OK) {// ดาวน์โหลดนานแล้ว ขนาด: %s, เวลาอัปโหลด: %d วินาที ", formatsize (ftpfiles [i] .getSize ()), ครั้ง/1000)); c ++;} else {system.out.println (" <<< ดาวน์โหลดล้มเหลว ");}} catch (ioexception e) ในที่สุด {ลอง {ถ้า (fos! = null) fos.close (); ปิด (ftpClient);} catch (Exception e) {}}} return c;}ขนาดไฟล์รูปแบบ
DecimalFormat DEF = ใหม่ DECIMALFORMAT ใหม่ ("#. ##"); / ** * ขนาดไฟล์รูปแบบ (b, kb, mb, gb) * @param size * @return */ สตริงส่วนตัว formatsize (ขนาดยาว) {ถ้า (ขนาด <1024) {ส่งคืนขนาด + "b"; } อื่นถ้า (ขนาด <1024*1024) {ส่งคืนขนาด/1024 + "kb"; } อื่นถ้า (ขนาด <1024*1024*1024) {return (ขนาด/(1024*1024)) + "MB"; } else {double gb = size/(1024*1024*1024); ส่งคืน df.format (GB)+"GB"; -V. ทดสอบ
โมฆะคงที่สาธารณะหลัก (สตริง args []) {ftptest ftp = new ftptest ("192.168.1.10", 21, null, null, "/temp/2016/12"); ftp.upload ("newfile.rar", "d: /ftp/teamviewerportable.rar"); System.out.println (""); ftp.download ("d:/ftp/"); -ผลลัพธ์
=== เชื่อมต่อกับ FTP: 192.168.1.10:21>>> สตาร์ตไฟล์อัปโหลด: TeamViewERERTABLE.RAR >>> อัปโหลดสำเร็จ: ขนาด: 5 MB เวลาอัปโหลด: 3 วินาที !!! การเชื่อมต่อ FTP: 192.168.1.10:21== newfile.rar <<< ค้นพบสำเร็จ: ขนาด: 5 MB เวลาอัปโหลด: 4 วินาที !!! การเชื่อมต่อ FTP เชื่อมต่อ: 192.168.1.10:21
สรุป
ข้างต้นเป็นคำอธิบายโดยละเอียดทั้งหมดเกี่ยวกับการใช้ชุดเครื่องมือ Apache ของ Java เพื่อใช้รหัสการถ่ายโอนไฟล์ FTP ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!