将下载文件的文件大小与ftp服务器上的远程文件进行比较

时间:2012-12-14 14:22:33

标签: java unix ftp sftp ftp-client

我正在使用FTPClient从远程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 个答案:

答案 0 :(得分:1)

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

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

编辑:

在ftp:dir文件名里面会返回类似这样的内容

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

我不知道如何让你的java类发送该命令。检查您的文档。当你可以dir工作时,你可以对你得到的字符串进行标记,第五个字段是远程端的字节数。

在将fileA从远程下载到本地后,使用unix shell(java将允许您运行UNIX脚本)的示例:

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 clear ftp不会在远程端运行shell脚本。 ssh确实。