我正在使用 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服务器上下载,文件大小之间存在差异。我对比了下载的文件,内容是一样的。
请指教。
最佳答案
如果大小上的字节数差异 ~= 文件中的行数,则这是由于删除了 Windows 回车控制字符:\r
或 ^M
,因为它们出现在 vi 中。
并且内容不一样,因为校验和会失败。
编辑:
内部 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 可以。
关于java - 比较下载文件与 ftp 服务器上的远程文件的文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13880498/