使用 TarArchiveInputStream 时遇到 “Corrupted TAR archive“ 的问题,java连接远程虚拟机读取目录下34.tar.gz压缩包,解压34.tar.gz压缩包

为了从远程虚拟机读取34.tar.gz压缩包、解压缩并获取文件的 MD5 值,你可以使用 JSch 库连接到远程服务器,通过 SSH 获取文件流,然后使用 Apache Commons Compress 库进行解压缩,并计算 MD5 值。以下是一个基本的 Java 代码示例,假设你已经配置好 JSch 和 Commons Compress 的依赖:

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.utils.IOUtils;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.security.MessageDigest;

public class RemoteTarGzReader {

    public static void main(String[] args) {
        String host = "your-remote-host";
        String user = "your-username";
        String password = "your-password";
        String remoteFilePath = "/path/to/34.tar.gz";

        try {
            JSch jsch = new JSch();
            Session session = jsch.getSession(user, host, 22);
            session.setConfig("StrictHostKeyChecking", "no");
            session.setPassword(password);
            session.connect();

            Channel channel = session.openChannel("exec");
            ((ChannelExec) channel).setCommand("cat " + remoteFilePath);
            InputStream in = channel.getInputStream();
            channel.connect();

            byte[] buffer = IOUtils.toByteArray(in);

            // Now 'buffer' contains the contents of the remote file
            ByteArrayInputStream byteStream = new ByteArrayInputStream(buffer);

            // Uncompressing the tar.gz file
            try (TarArchiveInputStream tarInput = new TarArchiveInputStream(byteStream)) {
                TarArchiveEntry entry;
                while ((entry = tarInput.getNextTarEntry()) != null) {
                    String fileName = entry.getName();
                    byte[] fileContent = new byte[(int) entry.getSize()];
                    tarInput.read(fileContent);

                    // Calculate MD5
                    String md5 = calculateMD5(fileContent);
                    
                    System.out.println("File: " + fileName);
                    System.out.println("MD5: " + md5);
                }
            }

            channel.disconnect();
            session.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static String calculateMD5(byte[] content) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] digest = md.digest(content);

        // Converting the byte array to hex string
        StringBuilder result = new StringBuilder();
        for (byte b : digest) {
            result.append(String.format("%02x", b));
        }

        return result.toString();
    }
}

请注意:

  1. 这是一个简单的例子,实际上你可能需要更多的错误处理和配置。
  2. 要确保你的远程服务器支持执行 cat 命令来读取文件内容。
  3. 如果 JSch 和 Commons Compress 的依赖未添加到项目中,请添加相应的 JAR 文件。
  4. 请根据你的实际需求修改主机名、用户名、密码和文件路径。
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值