流闭合错误Groovy

时间:2014-03-12 12:53:39

标签: file groovy ftp md5 message-digest

您好我正在尝试连接FTP并读取文件并为该文件生成md5校验和值,但我正面临Stream Closed错误。这是我的代码。

import java.io.FileInputStream;
import java.security.MessageDigest;
import java.util.Properties;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.apache.commons.net.ftp.FTPClient;

MessageDigest digest = MessageDigest.getInstance("MD5");

FTPClient ftp=new FTPClient();
ftp.enterLocalPassiveMode();
ftp.connect("address");
ftp.login('username','password');
InputStream iStream=ftp.retrieveFileStream("path of the file");
BufferedInputStream bInf=new BufferedInputStream(iStream);
byte[] buffer = new byte[8192];    
int read = 0;
while ((read = bInf.read(buffer)) !=-1)
{
digest.update(buffer, 0, read);
};

byte[] md5sum = digest.digest();
BigInteger bigInt = new BigInteger(1, md5sum)
def x=bigInt.toString(16).padLeft(32,'0')

请在我出错的地方帮助我

1 个答案:

答案 0 :(得分:1)

我使用以下代码:

import java.security.MessageDigest
import org.apache.commons.net.ftp.FTPClient

MessageDigest digest = MessageDigest.getInstance("MD5")

String md5 = new FTPClient().with { ftp ->
    try {
        ftp.enterLocalPassiveMode()
        ftp.connect( address )
        ftp.login( username, password )
        ftp.retrieveFileStream( path ).with { ins ->
            if( ins == null ) {
                println "ERROR: $ftp.replyCode '${ftp.replyString.trim()}'"
            }
            else {
                try {
                    ins.eachByte( 8192 ) { buffer, nbytes ->
                        digest.update( buffer, 0, nbytes )
                    }
                    digest.digest().encodeHex().toString().padLeft( 32, '0' )
                }
                finally {
                    ins.close()
                }
            }
        }
    }
    finally {
        ftp.disconnect()
    }
}

(假设您为addressusernamepasswordpath定义了变量