Saya perlu menggunakan java untuk menulis alat ftp, karena hanya ada sedikit dasar java, tetapi karena saya belum menggunakannya selama beberapa tahun, saya hampir tidak bisa melakukannya, jadi saya harus melakukannya sedikit Sedikit, tapi untungnya saya bisa mengambilnya.
Namun, karena saya menggunakan Javac untuk dikompilasi di bawah Linux, tidak menggunakan IDE untuk melakukan hal -hal ini di bawah menang, saya meluangkan waktu untuk menjalankan dan menyusun. . Beberapa.
Untuk alat unduhan FTP, kodenya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
impor java.io.file;
impor java.io.fileInputStream;
impor java.io.filenotfoundException;
impor java.io.fileoutputStream;
impor java.io.ioException;
impor java.io.inputstream;
impor java.io.outputStream;
impor java.net.socketexception;
impor org.apache.commons.net.ftp.ftpclient;
impor org.apache.commons.net.ftp.ftpreply;
kelas publik ftpclient {
host string pribadi;
port int pribadi;
nama pengguna string pribadi;
kata sandi string pribadi;
Private Boolean BinaryTransfer = true;
private boolean passivemode = true;
private string encoding = "UTF-8";
private int clientTimeout = 3000;
bendera boolean pribadi = true;
ftpClient private ftpClient = null;
gethost string publik () {
Return Host;
}
public void setHost (string host) {
this.host = host;
}
publik int getport () {
port kembali;
}
public void setport (int port) {
this.port = port;
}
string publik getUserName () {
mengembalikan nama pengguna;
}
public void setusername (string username) {
this.username = nama pengguna;
}
Public String getPassword () {
mengembalikan kata sandi;
}
public void setPassword (string password) {
this.password = kata sandi;
}
public boolean isBinaryTransfer () {
Return BinaryTransfer;
}
public void setBinaryTransfer (Boolean BinaryTransfer) {
this.binaryTransfer = BinaryTransfer;
}
public boolean isPassiveMode () {
mengembalikan passivemode;
}
public void setPassiveMode (boolean passiveMode) {
this.passiveMode = passiveMode;
}
Public String getEncoding () {
pengkodean kembali;
}
public void setencoding (string encoding) {
this.encoding = encoding;
}
public int getClientTimeOut () {
kembali ClientTimeout;
}
public void setClientTimeOut (int clientTimeout) {
this.clientTimeout = clientTimeout;
}
ftpclient publik (host string) {
this.username = "anonim";
this.encoding = "UTF-8";
this.binaryTransfer = true;
this.binaryTransfer = true;
this.port = 21;
this.host = host;
mencoba {
this.ftpClient = getFtpClient ();
} catch (Exception e) {
System.out.println ("Buat kesalahan ftpClient!");
}
}
private ftpClient getFtPclient () melempar ioException {
FtpClient ftpClient = ftpClient baru ();
ftpClient.setControlencoding (encoding);
Connect (ftpClient);
if (passiveMode) {
ftpClient.enterLocalPassiveMode ();
}
setFileType (ftpClient);
mencoba {
ftpClient.setSoTimeout (ClientTimeout);
} catch (SocketException e) {
Lempar ioException baru ("Set ERROR TIMEOUT.", E);
}
return ftpClient;
}
private void setFileType (ftpClient ftpClient) melempar ioException {
mencoba {
if (BinaryTransfer) {
ftpClient.setFileType (ftpclient.binary_file_type);
} kalau tidak {
ftpClient.setFileType (ftpclient.ascii_file_type);
}
} catch (ioException e) {
Lempar ioException baru ("tidak bisa mengatur jenis file.", e);
}
}
public boolean connect (ftpClient ftpclient) melempar ioException {
mencoba {
ftpclient.connect (host, port);
int balasan = ftpclient.getReplycode ();
if (ftpreply.ispositiveCompletion (balasan)) {
if (ftpclient.login (nama pengguna, kata sandi)) {
setFileType (ftpClient);
Kembali Benar;
}
} kalau tidak {
this.ftpclient.disconnect ();
Lempar ioException baru ("Server FTP menolak koneksi.");
}
} catch (ioException e) {
if (this.ftpclient.isconnected ()) {
mencoba {
this.ftpclient.disconnect ();
} catch (ioException e1) {
melempar ioException baru ("tidak dapat memutuskan dari server.", E);
}
}
Lempar ioException baru ("tidak dapat terhubung ke server.", e);
}
mengembalikan false;
}
private void disconnect () melempar ioException {
mencoba {
this.ftpclient.logout ();
} catch (ioException e) {
System.out.println ("Logout May Timeout!");
} Akhirnya {
if (this.ftpclient.isconnected ()) {
this.ftpclient.disconnect ();
}
}
}
InputStream Publik GetStream (String ServerFile) melempar IoException {
InputStream instream = null;
mencoba {
instream = this.ftpclient.retrievefileStream (serverfile);
System.out.println ("Instream Get Over!");
pengembalian instream;
} catch (ioException e) {
System.out.println ("Dapatkan Pengecualian Stream");
kembali nol;
}
}
WriteRestream Boolean Publik (Input InputStream, String LocalFile) melempar IoException {
FileOutputStream fout = baru fileOutputStream (localfile);
int ch = 0;
if (input == null) {
System.out.println ("Input is Null");
mengembalikan false;
}
mencoba {
ch = input.read ();
while (ch! = -1) {
fout.write (ch);
ch = input.read ();
}
System.out.println ("Tulis over!");
pengembalian bendera;
} catch (ioException e) {
Lempar ioException baru ("Tidak bisa mendapatkan file dari server.", e);
}
}
public boolean isExist (string remoteFilePath) melempar ioException {
mencoba{
File file = file baru (RemoteFilePath);
String remotePath = remoteFilePath.substring (0, (remoteFilePath.indexof (file.getName ())-1));
String [] listNames = this.ftpclient.listNames (remotePath);
System.out.println (RemoteFilePath);
untuk (int i = 0; i <listnames.length; i ++) {
System.out.println (ListNames [i]);
if (remoteFilePath.equals (listNames [i])) {
bendera = true;
System.out.println ("File:"+file.getName ()+"ada");
merusak;
}kalau tidak {
bendera = false;
}
}
} catch (ioException e) {
lempar ioException baru ("file pengecualian", e);
}
pengembalian bendera;
}
// Utama untuk pengujian
public static void main (string [] args) melempar ioException {
String hostName = "cp01-testing-ps7130.cp01.baidu.com";
String serverFile = "/home/work/check_disk.sh";
String localFile = "/home/work/workspace/proyek/dhc2-0/dhc/base/ftp/task_get";
FtpClient ftp = ftpClient baru (hostName);
System.out.println (ftp.isexist (serverfile));
ftp.writeStream (ftp.getStream (serverfile), localfile);
ftp.disconnect ();
}
}
Alat ini digunakan untuk mengunggah cluster dengan alat Hadoop lain, sehingga aliran input dan output dipisahkan, yang juga untuk memfasilitasi penggunaan alat lain.
Untuk menambahkan satu hal, cara menjalankan dalam konfigurasi Linux:
Jika kode tersebut perlu dijalankan di Linux, pertama -tama, Anda perlu mengkonfigurasi paket responsif, misalnya
Salinan kode adalah sebagai berikut:
impor org.apache.commons.net.ftp.ftpclient;
Paket ini baru saja diunduh secara langsung di situs web Apache.
Salinan kode adalah sebagai berikut:
Ekspor ftPpath = "$ {path} /xxx.jar"
javac -classpath $ classpath: $ ftppath ftpclient.java
Demikian pula, ClassPath harus ditentukan saat menjalankan:
Salinan kode adalah sebagai berikut:
java -classpath $ classpath: $ ftppath ftpclient
Disarankan untuk tidak memasukkan $ ftppath di ClassPath, cukup rujuk ke variabel lingkungan jika Anda menggunakannya.
Di atas adalah semua tentang artikel ini.
Harap luangkan waktu untuk berbagi artikel dengan teman Anda atau tinggalkan komentar. Kami akan dengan tulus berterima kasih atas dukungan Anda!