ฉันต้องใช้ Java เพื่อเขียนเครื่องมือ FTP เพราะมีพื้นฐาน Java เพียงเล็กน้อย แต่เนื่องจากฉันไม่ได้ใช้มันมาหลายปีฉันจึงไม่สามารถทำได้ดังนั้นฉันจึงต้องทำมันเล็กน้อย บิต แต่โชคดีที่ฉันสามารถหยิบมันขึ้นมาได้
อย่างไรก็ตามเนื่องจากฉันใช้ Javac เพื่อรวบรวมภายใต้ Linux ไม่ได้ใช้ IDE เพื่อทำสิ่งเหล่านี้ภายใต้การชนะฉันใช้เวลาพอสมควรในการเรียกใช้และรวบรวม . บาง.
สำหรับเครื่องมือดาวน์โหลด FTP รหัสมีดังนี้:
การคัดลอกรหัสมีดังนี้:
นำเข้า Java.io.File;
นำเข้า Java.io.FileInputStream;
นำเข้า java.io.filenotfoundException;
นำเข้า Java.io.FileOutputStream;
นำเข้า java.io.ioException;
นำเข้า Java.io.InputStream;
นำเข้า Java.io.OutputStream;
นำเข้า java.net.socketexception;
นำเข้า org.apache.commons.net.ftp.ftpclient;
นำเข้า org.apache.commons.net.ftp.ftpreply;
ชั้นเรียนสาธารณะ ftpclient {
โฮสต์สตริงส่วนตัว
พอร์ต int ส่วนตัว;
ชื่อผู้ใช้สตริงส่วนตัว;
รหัสผ่านสตริงส่วนตัว
บูลีนส่วนตัว binaryTransfer = true;
บูลีนส่วนตัว passivemode = true;
การเข้ารหัสสตริงส่วนตัว = "UTF-8";
ส่วนตัว int clienttimeout = 3000;
ธงบูลีนส่วนตัว = จริง;
ftpClient ส่วนตัว ftpClient = null;
สตริงสาธารณะ gethost () {
โฮสต์กลับ;
-
โมฆะสาธารณะ sethost (โฮสต์สตริง) {
this.host = โฮสต์;
-
สาธารณะ int getport () {
พอร์ตกลับ;
-
โมฆะสาธารณะ setport (พอร์ต int) {
this.port = พอร์ต;
-
สตริงสาธารณะ getUserName () {
คืนชื่อผู้ใช้;
-
โมฆะสาธารณะ setUserName (ชื่อผู้ใช้สตริง) {
this.username = ชื่อผู้ใช้;
-
สตริงสาธารณะ getPassword () {
ส่งคืนรหัสผ่าน;
-
โมฆะสาธารณะ setPassword (รหัสผ่านสตริง) {
this.password = รหัสผ่าน;
-
บูลีนสาธารณะ isBinaryTransfer () {
กลับ BinaryTransfer;
-
โมฆะสาธารณะ SetBinaryTransfer (Boolean BinaryTransfer) {
this.binaryTransfer = binaryTransfer;
-
บูลีนสาธารณะ isPassiveMode () {
ส่งคืน passivemode;
-
โมฆะสาธารณะ SetPassiveMode (Boolean PassiveMode) {
this.passiveMode = passiveMode;
-
สตริงสาธารณะ getEncoding () {
การเข้ารหัสกลับ;
-
โมฆะสาธารณะ setEncoding (การเข้ารหัสสตริง) {
this.encoding = การเข้ารหัส;
-
สาธารณะ int getClientTimeOut () {
ส่งคืนไคลเอ็นต์
-
โมฆะสาธารณะ setClientTimeOut (int clienttimeout) {
this.clienttimeout = clienttimeout;
-
FTPClient สาธารณะ (โฮสต์สตริง) {
this.username = "Anonymous";
this.encoding = "UTF-8";
this.binaryTransfer = true;
this.binaryTransfer = true;
this.port = 21;
this.host = โฮสต์;
พยายาม {
this.ftpClient = getftpClient ();
} catch (Exception e) {
System.out.println ("สร้างข้อผิดพลาด ftpClient!");
-
-
ftpClient ส่วนตัว getftpClient () พ่น IOException {
ftpClient ftpClient = new ftpClient ();
ftpclient.setControlencoding (การเข้ารหัส);
เชื่อมต่อ (ftpclient);
if (passiveMode) {
ftpClient.EnterlocalPassiveMode ();
-
setFileType (ftpClient);
พยายาม {
ftpclient.setSotimeout (clienttimeout);
} catch (socketexception e) {
โยน iOexception ใหม่ ("ตั้งค่าข้อผิดพลาดหมดเวลา", e);
-
ส่งคืน ftpclient;
-
โมฆะส่วนตัว setFileType (ftpClient ftpClient) พ่น IOException {
พยายาม {
ถ้า (BinaryTransfer) {
ftpClient.setFileType (ftpClient.binary_file_type);
} อื่น {
ftpClient.setFileType (ftpClient.ascii_file_type);
-
} catch (ioexception e) {
โยน iOexception ใหม่ ("ไม่สามารถตั้งค่าประเภทไฟล์", e);
-
-
การเชื่อมต่อบูลีนสาธารณะ (ftpclient ftpclient) พ่น IOException {
พยายาม {
ftpclient.connect (โฮสต์, พอร์ต);
int ตอบ = ftpClient.getReplyCode ();
if (ftpreply.ispositiveCompletion (ตอบกลับ)) {
if (ftpClient.login (ชื่อผู้ใช้รหัสผ่าน)) {
setFileType (ftpClient);
กลับมาจริง;
-
} อื่น {
this.ftpclient.disconnect ();
โยน iOexception ใหม่ ("เซิร์ฟเวอร์ FTP ปฏิเสธการเชื่อมต่อ");
-
} catch (ioexception e) {
if (this.ftpclient.isconnected ()) {
พยายาม {
this.ftpclient.disconnect ();
} catch (ioexception e1) {
โยน iOexception ใหม่ ("ไม่สามารถตัดการเชื่อมต่อจากเซิร์ฟเวอร์", e);
-
-
โยน iOexception ใหม่ ("ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์", e);
-
กลับเท็จ;
-
โมฆะส่วนตัวยกเลิกการเชื่อมต่อ () พ่น IOException {
พยายาม {
this.ftpclient.logout ();
} catch (ioexception e) {
System.out.println ("ออกจากระบบอาจหมดเวลา!");
} ในที่สุด {
if (this.ftpclient.isconnected ()) {
this.ftpclient.disconnect ();
-
-
-
Public InputStream GetStream (String ServerFile) พ่น IOException {
InputStream Instream = null;
พยายาม {
instream = this.ftpclient.retrieveFileStream (ServerFile);
System.out.println ("Instream Get Over!");
กลับเป็นเครื่องมือ;
} catch (ioexception e) {
System.out.println ("รับข้อยกเว้นสตรีม");
คืนค่า null;
-
-
Public Boolean Writestream (อินพุตอินพุต, สตริง localfile) พ่น IOException {
fileOutputStream fout = ใหม่ fileOutputStream (localFile);
int ch = 0;
if (input == null) {
System.out.println ("อินพุตเป็น null");
กลับเท็จ;
-
พยายาม {
ch = input.read ();
ในขณะที่ (ch! = -1) {
fout.write (ch);
ch = input.read ();
-
System.out.println ("เขียนมากกว่า!");
ธงกลับ;
} catch (ioexception e) {
โยน iOexception ใหม่ ("ไม่สามารถรับไฟล์จากเซิร์ฟเวอร์", e);
-
-
Public Boolean Isexist (String RemoteFilePath) พ่น IOException {
พยายาม{
ไฟล์ไฟล์ = ไฟล์ใหม่ (RemoteFilePath);
string remotePath = remotefilepath.substring (0, (remotefilepath.indexof (file.getName ())-1));
String [] listNames = this.ftpClient.ListNames (RemotePath);
System.out.println (RemoteFilePath);
สำหรับ (int i = 0; i <listnames.length; i ++) {
System.out.println (listnames [i]);
if (remotefilepath.equals (listnames [i])) {
ธง = จริง;
System.out.println ("ไฟล์:"+file.getName ()+"มีอยู่");
หยุดพัก;
}อื่น {
ธง = เท็จ;
-
-
} catch (ioexception e) {
โยน iOexception ใหม่ ("ข้อยกเว้นไฟล์", e);
-
ธงกลับ;
-
// หลักสำหรับการทดสอบ
โมฆะคงที่สาธารณะหลัก (String [] args) พ่น IOException {
String hostname = "CP01-testing-ps7130.cp01.baidu.com";
String ServerFile = "/home/work/check_disk.sh";
String localfile = "/home/work/workspace/project/dhc2-0/dhc/base/ftp/task_get";
ftpClient ftp = new ftpClient (ชื่อโฮสต์);
System.out.println (ftp.isexist (Serverfile));
ftp.writestream (ftp.getstream (Serverfile), localfile);
ftp.disconnect ();
-
-
เครื่องมือนี้ใช้สำหรับการอัปโหลดคลัสเตอร์กับเครื่องมือ Hadoop อื่นดังนั้นสตรีมอินพุตและเอาต์พุตจะถูกคั่นด้วยซึ่งเป็นการอำนวยความสะดวกในการใช้เครื่องมืออื่น
ในการเพิ่มสิ่งหนึ่งวิธีการทำงานในการกำหนดค่า Linux:
หากรหัสดังกล่าวจำเป็นต้องทำงานใน Linux ก่อนอื่นคุณต้องกำหนดค่าแพ็คเกจตอบสนองเช่น
การคัดลอกรหัสมีดังนี้:
นำเข้า org.apache.commons.net.ftp.ftpclient;
แพ็คเกจนี้เพิ่งดาวน์โหลดโดยตรงบนเว็บไซต์ Apache
การคัดลอกรหัสมีดังนี้:
ส่งออก ftppath = "$ {path} /xxx.jar"
javac -classpath $ classpath: $ ftppath ftpclient.java
ในทำนองเดียวกันจะต้องระบุ classpath เมื่อทำงาน:
การคัดลอกรหัสมีดังนี้:
java -classpath $ classpath: $ ftppath ftpclient
ขอแนะนำให้ไม่รวม $ ftppath ใน classpath เพียงอ้างถึงตัวแปรสภาพแวดล้อมหากคุณใช้มัน
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้
โปรดใช้เวลาแบ่งปันบทความกับเพื่อนของคุณหรือแสดงความคิดเห็น เราจะขอบคุณอย่างจริงใจสำหรับการสนับสนุนของคุณ!