我正在使用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服务器中下载,文件大小之间存在差异。我比较了下载的文件,内容是一样的。
请建议。
答案 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确实。