Мне нужно использовать 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;
Import org.apache.commons.net.ftp.ftpclient;
Импорт org.apache.commons.net.ftp.ftpreply;
открытый класс ftpclient {
частный хост строки;
частный порт int;
частное имя пользователя;
Private String Password;
Частный логический BinaryTransfer = true;
Частный логический Passivemode = true;
частная строка Encoding = "UTF-8";
private int clienttimeout = 3000;
Частный логический флаг = true;
Частный ftpclient ftpclient = null;
public String gethost () {
возвратный хост;
}
public void sethost (String Host) {
this.host = host;
}
public int getport () {
вернуть порт;
}
public void setport (int port) {
this.port = порт;
}
public String getUsername () {
вернуть имя пользователя;
}
public void setusername (string username) {
this.username = имя пользователя;
}
public String getPassword () {
вернуть пароль;
}
public void setPassword (String пароль) {
this.password = пароль;
}
public boolean isbinaryTransfer () {
вернуть BinaryTransfer;
}
public void setBinaryTransfer (Boolean BinaryTransfer) {
this.binaryTransfer = binaryTransfer;
}
public boolean ispassivemode () {
вернуть passivemode;
}
public void setPassiVemode (boolean passivemode) {
this.passivemode = passivemode;
}
public String getEncoding () {
вернуть кодирование;
}
public void setencoding (string encoding) {
this.encoding = кодирование;
}
public int getClienttimeout () {
вернуть ClientTimeout;
}
public void setClientTimeout (int clientTimeout) {
this.clienttimeout = clienttimeout;
}
public ftpclient (String host) {
this.username = "anonymous";
this.encoding = "utf-8";
this.binaryTransfer = true;
this.binaryTransfer = true;
this.port = 21;
this.host = 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;
}
private void setFileType (ftpClient ftpClient) бросает ioException {
пытаться {
if (binarytransfer) {
ftpclient.setfileType (ftpclient.binary_file_type);
} еще {
ftpclient.setFileType (ftpclient.ascii_file_type);
}
} catch (ioException e) {
бросить новое ioException («не может установить тип файла», e);
}
}
public boolean connect (ftpclient ftpclient) бросает ioexception {
пытаться {
ftpclient.connect (хост, порт);
int response = ftpclient.getReplyCode ();
if (ftpreply.ispositivecoplusion (reply)) {
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);
}
вернуть ложь;
}
private void dinconct () бросает 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 oft!");
вернуть instrem;
} catch (ioException e) {
System.out.println ("получить исключение потока");
вернуть ноль;
}
}
Public Boolean Writestream (InputStream Input, String Localfile) бросает ioException {
FileOutputStream fout = new FileOutputStream (LocalFile);
int ch = 0;
if (input == null) {
System.out.println («Ввод is null»);
вернуть ложь;
}
пытаться {
ch = input.read ();
while (ch! = -1) {
fout.write (ch);
ch = input.read ();
}
System.out.println ("написать!");
вернуть флаг;
} catch (ioException e) {
бросить новое ioException («не может получить файл с сервера», E);
}
}
Общественный логический Isexist (String remoteFilePath) бросает ioException {
пытаться{
File file = new File (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])) {
flag = true;
System.out.println ("file:"+file.getName ()+"существовал");
перерыв;
}еще {
flag = false;
}
}
} catch (ioException e) {
бросить новое ioException ("file Exception", e);
}
вернуть флаг;
}
// главное для тестирования
public static void main (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, прежде всего, вам необходимо настроить адаптивный пакет, например,
Кода -копия выглядит следующим образом:
Import org.apache.commons.net.ftp.ftpclient;
Этот пакет просто загружается непосредственно на веб -сайте Apache.
Кода -копия выглядит следующим образом:
Экспорт ftppath = "$ {path} /xxx.jar"
javac -classpath $ classpath: $ ftppath ftpclient.java
Точно так же, ClassPath должен быть указан при запуске:
Кода -копия выглядит следующим образом:
java -classpath $ classpath: $ ftppath ftpclient
Рекомендуется не включать в себя $ ftppath, просто обратитесь к переменным среды, если вы ее используете.
Выше всего об этой статье.
Пожалуйста, найдите время, чтобы поделиться статьей со своими друзьями или оставить комментарий. Мы искренне благодарим вас за вашу поддержку!