2012-12-14 131 views
1

我正在使用FTPClient从远程FTP服务器下载文件。将下载文件的文件大小与ftp服务器上的远程文件进行比较

下载后,我想比较本地文件和远程文件的大小,如果它们是相同的。

下载文件后,下载文件的大小与远程服务器的大小不同。

下面是代码片段

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); 

如果我下载windows环境下,它工作正常。但是如果我在AIX服务器上下载,文件大小有所不同。我比较下载的文件,内容是一样的。

请指教。

回答

1

如果字节数差异大小=文件中行数,这是由于删除了窗口托架控制字符:\r^M,因为它们出现在vi中。

而且在校验和失败的意义上,内容并不相同。

编辑:

内部FTP:目录文件名会返回这样的事情

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

我对如何让你的java类来发送命令中没有好主意。检查你的文档。当你可以得到dir的工作,你可以标记你获得的字符串,第五个字段是远程端的字节数。

例使用的UNIX shell(java会让你运行UNIX脚本)的fileA已经从远程下载给本地后:

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' 

如果你可以用Java类没关系模仿它,否则,你需要使用像这样,显示使用运行时执行exec()的:

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

再次,VBE明确FTP不上远程端运行shell脚本。 ssh的确如此。

+0

谢谢吉姆。这个问题的解决方法是什么。我想过比较本地文件和远程文件的散列,但我不能为FTPFile做散列,所以我也被困在那里。我真的想通过比较散列或其他东西的大小来检查本地文件是否已正确下载。 – Abs

+0

查看例子添加到答案 –

相关问题