Java를 사용하여 FTP 도구를 작성하려면 Java를 사용해야합니다. Java 기본 사항이 약간만 있으므로 몇 년 동안 사용하지 않았기 때문에 거의 할 수 없으므로 조금해야합니다. 조금, 그러나 다행히도 나는 그것을 집어들 수 있습니다.
그러나 Javac을 사용하여 Linux에서 컴파일을 사용하여 IDE를 사용하여 승리를 거두었 기 때문에 실행하고 컴파일하는 데 시간이 걸렸습니다. 일부.
FTP 다운로드 도구의 경우 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
import java.io.file;
import java.io.fileInputStream;
import java.io.filenotfoundException;
import java.io.fileoutputStream;
import java.io.ioexception;
import java.io.inputstream;
import java.io.outputStream;
import java.net.socketexception;
import org.apache.commons.net.ftp.ftpclient;
import org.apache.commons.net.ftp.ftpreply;
공개 클래스 ftpclient {
개인 문자열 호스트;
개인 int 포트;
개인 문자열 사용자 이름;
개인 문자열 비밀번호;
Private Boolean BinaryTransfer = true;
개인 부울 패시브 모드 = true;
개인 문자열 인코딩 = "UTF-8";
Private Int ClientTimeOut = 3000;
개인 부울 플래그 = 참;
개인 ftpclient ftpclient = null;
공개 문자열 gethost () {
리턴 호스트;
}
공개 void sethost (문자열 호스트) {
this.host = 호스트;
}
public int getport () {
반환 항구;
}
공개 void setport (int port) {
this.port = 포트;
}
공개 문자열 getUserName () {
사용자 이름을 반환합니다.
}
public void setusername (String username) {
this.username = username;
}
공개 문자열 getpassword () {
리턴 비밀번호;
}
public void setpassword (String password) {
this.password = 비밀번호;
}
공개 부울 isbinaryTransfer () {
BinaryTransfer를 반환합니다.
}
public void setbinaryTransfer (부울 바이너 트랜스퍼) {
this.binaryTransfer = BinaryTransfer;
}
공개 부울 ispassiveMode () {
반환 패시브 모드;
}
public void setPassiveMode (부울 패시브 메모드) {
this.PassiveMode = PassiveMode;
}
public String getencoding () {
리턴 인코딩;
}
public void setencoding (String encoding) {
this.encoding = 인코딩;
}
public int getClientTimeout () {
ClientTimeout을 반환합니다.
}
public void setclienttimeout (int clienttimeout) {
this.clientTimeout = 클라이언트 타임 아웃;
}
public ftpclient (문자열 호스트) {
this.username = "익명";
this.encoding = "utf-8";
this.binaryTransfer = true;
this.binaryTransfer = true;
this.port = 21;
this.host = 호스트;
노력하다 {
this.ftpclient = getftpclient ();
} catch (예외 e) {
System.out.println ( "ftpclient 오류 만들기!");
}
}
private ftpclient getftpclient ()는 ioexception {
ftpclient ftpclient = 새로운 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 reply = ftpclient.getReplyCode ();
if (ftpReply.ispositivecempletion (답장)) {
if (ftpclient.login (username, password)) {
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 delponnect ()는 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 ( "스트림 예외 GET");
널 리턴;
}
}
public boolean writestream (inputstream input, string localfile)은 ioexception {
fileoutputStream fout = 새 FileOutputStream (localFile);
int ch = 0;
if (input == null) {
System.out.println ( "입력은 null");
거짓을 반환합니다.
}
노력하다 {
ch = input.read ();
while (ch! = -1) {
fout.write (ch);
ch = input.read ();
}
System.out.println ( "쓰기!");
리턴 플래그;
} catch (ioexception e) {
새로운 ioexception ( "서버에서 파일을 얻을 수 없음", E);
}
}
Public Boolean isexist (String Z
노력하다{
파일 = 새 파일 (remoteFilePath);
문자열 remotepath = RemoteFilePath.SubString (0, (remoteFilePath.IndExof (file.getName ()));
문자열 [] listnames = this.ftpclient.listnames (remotepath);
System.out.println (remotefilepath);
for (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 ( "파일 예외", e)을 던지십시오.
}
리턴 플래그;
}
// 테스트를위한 메인
public static void main (String [] args)은 ioexception {
문자열 hostname = "CP01- 테스트 -PS7130.cp01.baidu.com";
String ServerFile = "/HOME/WORK/Check_Disk.sh";
문자열 localfile = "/home/work/workspace/project/dhc2-0/dhc/base/ftp/task_get";
ftpclient ftp = 새로운 ftpclient (hostname);
System.out.println (ftp.isexist (serverfile));
ftp.writestream (ftp.getstream (serverfile), localfile);
ftp.disconnect ();
}
}
이 도구는 다른 Hadoop 도구로 클러스터 업로드에 사용되므로 입력 및 출력 스트림이 분리되어 다른 도구의 사용을 용이하게합니다.
한 가지 추가하려면 Linux 구성에서 실행하는 방법 :
이러한 코드가 Linux에서 실행 해야하는 경우 먼저 응답 형 패키지를 구성해야합니다.
코드 사본은 다음과 같습니다.
import org.apache.commons.net.ftp.ftpclient;
이 패키지는 아파치 웹 사이트에서 직접 다운로드하여 해당 JAR 패키지를 찾아서 편집 중에 참조하십시오.
코드 사본은 다음과 같습니다.
내보내기 ftppath = "$ {path} /xxx.jar"
javac -classpath $ classpath : $ ftppath ftpclient.java
마찬가지로 실행할 때 클래스 경로를 지정해야합니다.
코드 사본은 다음과 같습니다.
Java -ClassPath $ ClassPath : $ ftppath ftpclient
ClassPath에 $ ftppath를 포함하지 않는 것이 좋습니다. 모든 패키지를 가져올 필요가없는 것처럼 환경 변수를 모두 추가 할 필요가 없습니다.
위는이 기사에 관한 것입니다.
시간을내어 기사를 친구들과 공유하거나 의견을 남겨주세요. 귀하의 지원에 진심으로 감사드립니다!