java - 比较下载文件与 ftp 服务器上的远程文件的文件大小

标签 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服务器上下载,文件大小之间存在差异。我对比了下载的文件,内容是一样的。

请指教。

最佳答案

如果大小上的字节数差异 ~= 文件中的行数,则这是由于删除了 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/

相关文章:

git - 自定义 Git 命令在执行 git diff 后死于信号 13 (SIGPIPE)

c++ - 子级和父级 C 程序中的 SIGSEGV 处理

node.js - 为什么 'sh -c' 返回的结果与我的实际命令不同?

curl - 使用 CURL 删除 FTP 目录内容

asp.net - 并非所有文件都显示在与 Azure Web App 的 ftp session 中

java - 在Tomcat部署之前运行java方法启动数据库

java - 播放框架 1.2.5 : OutOfMemoryError occured : Java heap space in play framework

PHP 颠覆设置 FTP

java - 使用数据库身份验证设置 CAS Jasig 服务器

java - 我如何计算一行中单词的出现次数