Java의 FTP 서버에서 파일 업로드
Apache Commons Net API를 사용하면 FTP 서버에서 파일을 다운로드하기 위한 프로그램을 쉽게 코딩할 수 있습니다. 이 기사에서는 FTP.
Apache Commons Net API 및 FTP
org.apache.commons.net.ftp.FTPClient은 FTP 서버에서 파일을 다운로드하는 두 가지 방법을 제공합니다.
1) boolean retrieveFile(String remote, OutputStream local): 이 메서드는 remote을 사용하고 OutputStream입니다. 이 메서드는 true, 그렇지 않으면 false입니다. 이 방법은 전송에 대한 정보와 파일이 디스크에 저장되는 방법을 알 필요가 없을 때 프로그램에 적합합니다. 다운로드가 끝나면 출력 스트림을 닫아야 합니다 OutputStream 다운로드 끝에 있습니다.
2) InputStream retrieveFileStream(String remote): 이 메서드는 원격 파일 경로만 매개변수로 사용하며 OutputStream이지만 InputStream 파일에서 수신한 바이트를 읽는 데 유용할 수 있습니다. 이 방법을 사용하면 바이트가 로컬 디스크에 기록되는 방식을 더 잘 제어할 수 있습니다. 이 방법을 사용하는 데는 두 가지 중요한 사항이 있습니다.
- completePendingCommand()을 호출하여 다운로드를 완료하고 반환된 값을 확인하여 다운로드가 수행되었는지 확인해야 합니다.
- 재생 스트림을 닫아야 합니다InputStream.
문제는 어떤 방법을 사용해야합니까? 다음은 몇 가지 트릭입니다 :
- 첫 번째 방법은 OutputStream 디스크에 저장하려는 파일의
- 두 번째 방법을 사용하면 전송 방법을 더 잘 제어할 수 있으므로 InputStream 수신된 바이트를 읽고 OutputStream 읽은 바이트를 저장합니다. 이 방법은 얼마나 많은 바이트가 전송되었고 얼마나 남았는지 알고 싶을 때 유용합니다. 방법 completePendingCommand() 호출해야 합니다 다운로드를 완료하려면
- 두 메서드 모두 예외를 발생시킵니다 IOException 또는 다음 두 예외 : FTPConnectionClosedExcception 및 CopyStreamException입니다. 따라서 .
를 호출할 때 이러한 예외를 올바르게 처리해야 합니다. 또한 methodsretrieveFile() 및 retrieveFileStream ()< / span > : < / div>
< / div>
< / div>
- void enterLocalPassiveMode(): 이 방법은 연결 모드를 서버-클라이언트에서 클라이언트-서버로 변경하여 방화벽 금지 문제를 방지합니다.
- void setFileType(int fileType): 전송할 파일 유형을 변경하는 방법이므로 유형을 FTP로 변경하는 것이 좋습니다. FTP가 아닌 BINARY_FILE_TYPE. ASCII_FILE_TYPE 텍스트 파일일지라도 .
Java로 파일을 다운로드하는 단계
Apache Commons Net:
- Connect 및 서버에 로그인합니다.
- 수동 연결 모드 사용.
- 전송 유형을 바이너리로 변경합니다.
- outputStream 다운로드한 파일을 디스크에 저장합니다.
- 디스크에 대한 기록 경로를 지정합니다.
- retriveFile():
- Pass outputStream 및 파일 경로를 인수로 사용합니다.
- 닫기 쓰기 스트림 outputStream.
- 다운로드가 성공했는지 확인하기 위해 반환된 값을 읽습니다.
- retriveFileStream():
- 검색 위치 InputStream 메서드에 의해 반환됨 retriveFileStream().
- 바이트를 읽을 수 있는 설정된 크기(일반적으로 4096)의 바이트 배열(버퍼)을 만들고 a outputStream.
- completePendingCommand()을 사용하여 다운로드를 완료하고 반환된 값을 확인하여 전송이 성공했는지 확인합니다.
- 읽기 및 쓰기 스트림 닫기 InputStream 및 outputStream.
- disconnect().
Java에서 FTP를 사용하여 파일을 업로드하는 프로그램
이 코드는 다음 두 가지 방법을 사용하여 FTP 서버에서 파일을 다운로드하는 방법을 보여줍니다.- 부울 retrieveFile(문자열 원격, InputStream 로컬)
- inputStream retrieveFileStream (문자열 원격) < / span>< / li>< / ul>전체 코드는 다음과 같습니다 :
import java.io.BufferedOutputStream;
이 코드를 실행하면 다운로드가 성공했음을 나타냅니다:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream을 사용합니다.
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
public class FTPDownloadFile {
public static void main(String[] args) {
서버 문자열 = "ServerAddress";
int 포트 = 21;
문자열 사용자 이름 = "사용자 이름";
문자열 비밀번호 = "yourPassword";
FTPClient ftpClient = 새로운 FTPClient();
{
ftpClient.connect(서버, 포트);
ftpClient.login(사용자 이름, 비밀번호);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP. BINARY_FILE_TYPE);
// 접근법 1: InputStream
File file = new File("plugins and styles.txt");
String FileName = "플러그인 및 styles.txt";
InputStream inputStream = new FileInputStream(file);
System.out.println("다운로드 시작");
//결과 다운로드
boolean res = ftpClient.storeFile(filename, inputStream);
//재생 스트림 닫기
inputStream.close();
if (res==true) {
System.out.println(""+FileName+
" 파일이 성공적으로 다운로드되었습니다.");
}
// 접근법 2: OutputStream
String FileName2 = "Track 2.mp3";
문자열 RemoteFilePath = "/songs/"+FileName2;
파일 filelocal = new File("C:/track 2.mp3");
// 파일이 있는 폴더를 나열하고
// 그런 다음 얻을 이름으로 검색합니다
// 계산에 사용할 크기
// 다운로드의 비율
FTPFile[] files1 = ftpClient.listFiles("/songs");
긴 크기 = 0;
for(int i = 0; 나는< 파일1.길이; i++){
if(files1[i].getName().equals(FileName2))
//파일 크기 가져오기
size = files1[i].getSize();
}
OutputStream outputStream2 = new BufferedOutputStream(
new FileOutputStream(로컬 파일));
InputStream inputStream2 = ftpClient.retrieveFileStream(
RemoteFilePath);
byte[] bytesArray = 새 바이트[4096];
int 바이트읽기 = -1;
//끝에 도달하지 않는 한
int transferred = 0;
int 퍼센트 = 0;
while ((bytesRead = inputStream2.read(bytesArray)) != -1) {
//bytes는 지정된 위치에 기록됩니다
outputStream2.write(bytesArray, 0, bytesRead);
전달됨 += bytesRead;
퍼센트 = (int) (전송됨*100/크기);
System.out.println(백분율+"%");
}
//쓰기 읽기 스트림 닫기
inputStream2.close();
outputStream2.close();
//br //
res = ftpClient.completePendingCommand();
if (res) {
System.out.println(""+FileName2+
" 파일이 성공적으로 다운로드되었습니다.");
}
} catch (IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} 마지막으로 {
try {
if (ftpClient.isConnected()) {
//FTP
ftpClient.logout();
ftpClient.disconnect()를 호출합니다.
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}다운로드 시작
플러그인 및 styles.txt 파일이 성공적으로 다운로드되었습니다
다운로드 시작
1%
2%
3%
.
.
98%
99%
99%
100%
2.mp3 트랙 파일이 성공적으로 다운로드되었습니다