2012-12-14 1 views
1

FTPClient를 사용하여 원격 FTP 서버에서 파일을 다운로드하고 있습니다.다운로드 한 파일의 파일 크기와 ftp 서버의 원격 파일 비교

다운로드가 끝나면 로컬 파일과 원격 파일의 크기가 동일한 지 비교하고 싶습니다.

일단 파일을 다운로드하면 다운로드 한 파일의 크기가 원격 서버의 크기와 다릅니다.

다음은 내가 Windows 환경에서 잘 작동 다운로드하는 경우 코드가

FileOutputStream output = new FileOutputStream(localFile.getAbsolutePath()); 
     if(getFTPFileType()!=null){ 
          // set as binary 
      ftpClient.setFileType(getFTPFileType(), getFTPFileType()); 
      ftpClient.setFileTransferMode(getFTPFileType()); 
     } 
     if(getLog().isDebugEnabled()){ 
      getLog().debug("FTP File Type "+getFTPFileType()); 
     } 
     boolean success = ftpClient.retrieveFile(remoteFile.getName(), output); 

스 니펫입니다. 그러나 AIX 서버에서 다운로드하면 파일 크기가 달라집니다. 나는 다운로드 한 파일을 비교했다, 내용은 동일하다.

상담하십시오.

답변

1

크기 차이가 파일의 줄 수 ~ = 파일의 줄 수 인 경우, 이는 vi에 나타난 것처럼 캐리지 제어 문자 인 \r 또는 ^M이 제거 된 것입니다.

내용은 체크섬이 실패한다는 의미에서 동일하지 않습니다.

편집 : FTP 내부

: 디렉토리 파일 이름은 내가 그 명령을 보낼 자바 클래스를하는 방법에 대한 좋은 생각이이

-rw-rw-rw- 1 user  group  1224 Mar 4 20:22 twrite.c 

처럼 뭔가를 반환합니다. 문서를 확인하십시오. dir을 사용할 수있게되면 다시 가져온 문자열을 토큰화할 수 있고, 다섯 번째 필드는 원격 측의 바이트 수입니다. 그렇지 않으면 당신은 사용해야

local_size=$(ls -l fileA | awk '{print $5}') 
/usr/bin/ftp -n <<EOF > ftp.log 
open remote_nodename 
user username password 
cd /directory/to/files 
dir fileA 
bye 
END 
remote_size=$(grep 'fileA' ftp.log | awk '{print $5}') 
[ $remote_size -eq $local_size ] && echo 'OK' || echo 'NOTOK' 

괜찮 자바 클래스와이를 에뮬레이션 할 수있는 경우 : 유닉스 쉘을 사용

예 FILEA 로컬 원격에서 dowloaded 한 후, (자바는 UNIX 스크립트를 실행하게됩니다) 런타임 간부 인()를 사용하는 방법을 보여줍니다 이런 식으로 뭔가 :

http://www.java-samples.com/showtutorial.php?tutorialid=8 

가 다시, 원격 측에 쉘 스크립트를 실행하지 않습니다 명확 FTP를 VBE합니다. ssh가 수행합니다.

+0

감사합니다. Jim. 이 문제를 해결하는 방법은 무엇입니까? 내가 로컬 파일과 원격 파일의 해시를 비교 생각,하지만 난 FTPFile에 대한 해시를 할 수 없어, 그래서 거기에 붙어있다. 로컬 파일이 해시 또는 다른 크기를 비교하여 제대로 다운로드되었는지 확인하는 것이 좋습니다. – Abs

+0

답변을 예제에 추가하십시오. –