java程序解压/压缩.gz文件

本文提供了一个Java实现的GZIP文件压缩和解压缩的例子。通过使用Java标准库中的`GZIPOutputStream`和`GZIPInputStream`,可以轻松地将文件压缩为.gz格式,并将其还原为原始格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

压缩成.gz格式

import java.io.FileInputStream;   
import java.io.FileNotFoundException;   
import java.io.FileOutputStream;   
import java.io.IOException;   
import java.util.zip.GZIPOutputStream;   
  
  
public class CompressFileGZIP {   
private static void doCompressFile(String inFileName) {   
    
        try {   
          
            System.out.println("Creating the GZIP output stream.");   
            String outFileName = inFileName + ".gz";   
            GZIPOutputStream out = null;   
            try {   
                out = new GZIPOutputStream(new FileOutputStream(outFileName));   
            } catch(FileNotFoundException e) {   
                System.err.println("Could not create file: " + outFileName);   
                System.exit(1);   
            }   
                      
    
            System.out.println("Opening the input file.");   
            FileInputStream in = null;   
            try {   
                in = new FileInputStream(inFileName);   
            } catch (FileNotFoundException e) {   
            System.err.println("File not found. " + inFileName);   
                System.exit(1);   
            }   
  
            System.out.println("Transfering bytes from input file to GZIP Format.");   
            byte[] buf = new byte[1024];   
            int len;   
            while((len = in.read(buf)) > 0) {   
                out.write(buf, 0, len);   
            }   
            in.close();   
  
            System.out.println("Completing the GZIP file");   
            out.finish();   
            out.close();   
          
        } catch (IOException e) {   
            e.printStackTrace();   
            System.exit(1);   
        }   
  
    }   
  
    /**  
     * Sole entry point to the class and application.  
     * @param args Array of String arguments.  
     */   
    public static void main(String[] args) {   
    String str="E:\\AUTORUN.INF";   
          
            doCompressFile(str);   
          
    
               
    }   
}   

解压.gz格式

import java.util.zip.GZIPInputStream;   
import java.io.FileOutputStream;   
import java.io.FileInputStream;   
import java.io.FileNotFoundException;   
import java.io.IOException;   
  
public class UncompressFileGZIP {   
  
    /**  
     * Uncompress the incoming file.  
     * @param inFileName Name of the file to be uncompressed  
     */   
    private static void doUncompressFile(String inFileName) {   
  
        try {   
  
            if (!getExtension(inFileName).equalsIgnoreCase("gz")) {   
                System.err.println("File name must have extension of \".gz\"");   
                System.exit(1);   
            }   
  
            System.out.println("Opening the compressed file.");   
            GZIPInputStream in = null;   
            try {   
                in = new GZIPInputStream(new FileInputStream(inFileName));   
            } catch(FileNotFoundException e) {   
                System.err.println("File not found. " + inFileName);   
                System.exit(1);   
            }   
  
            System.out.println("Open the output file.");   
            String outFileName = getFileName(inFileName);   
            FileOutputStream out = null;   
           try {   
                out = new FileOutputStream(outFileName);   
            } catch (FileNotFoundException e) {   
                System.err.println("Could not write to file. " + outFileName);   
                System.exit(1);   
            }   
  
            System.out.println("Transfering bytes from compressed file to the output file.");   
            byte[] buf = new byte[1024];   
            int len;   
            while((len = in.read(buf)) > 0) {   
                out.write(buf, 0, len);   
            }   
  
            System.out.println("Closing the file and stream");   
            in.close();   
            out.close();   
          
        } catch (IOException e) {   
            e.printStackTrace();   
            System.exit(1);   
        }   
  
    }   
  
    /**  
     * Used to extract and return the extension of a given file.  
     * @param f Incoming file to get the extension of  
     * @return <code>String</code> representing the extension of the incoming  
     *         file.  
     */   
    public static String getExtension(String f) {   
        String ext = "";   
        int i = f.lastIndexOf('.');   
  
        if (i > 0 &&  i < f.length() - 1) {   
            ext = f.substring(i+1);   
        }        
        return ext;   
    }   
  
    /**  
     * Used to extract the filename without its extension.  
     * @param f Incoming file to get the filename  
     * @return <code>String</code> representing the filename without its  
     *         extension.  
     */   
    public static String getFileName(String f) {   
        String fname = "";   
        int i = f.lastIndexOf('.');   
  
        if (i > 0 &&  i < f.length() - 1) {   
            fname = f.substring(0,i);   
        }        
        return fname;   
    }   
  
    /**  
     * Sole entry point to the class and application.  
     * @param args Array of String arguments.  
     */   
    public static void main(String[] args) {   
      
         
            doUncompressFile("E:\\AUTORUN.INF.gz");   
         
  
    }   
  
}   

  本文出处:http://panshaobinsb.iteye.com/blog/1566231

要在 Java 程序中通过 HDFS API 解压缩 `hdfs://localhost:9000/total.gz` 的文件,并将其作为 Gzip 格式的文件处理,可以参考以下步骤: ### 实现流程 1. **引入必要的库** 首先需要导入 Apache Hadoop 和 GZIP 相关的依赖项到项目中。例如 Maven 项目的 pom.xml 可能会包含如下的内容: ```xml <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.x.x</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>3.x.x</version> </dependency> <!-- 如果未默认提供 --> <dependency> <groupId>org.tukaani</groupId> <artifactId>xz</artifactId> <version>1.8</version> </dependency> ``` 2. **连接到 HDFS 并读取数据流** 使用 HDFS 提供的 FileSystem 类建立与远程存储系统的通信。 示例代码片段: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import java.io.*; import java.nio.charset.StandardCharsets; public class HDFSUnzipExample { public static void main(String[] args) throws Exception { // 设置Hadoop配置并指定URI Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://localhost:9000"); try (FileSystem fs = FileSystem.get(conf); InputStream inStream = fs.open(new Path("/total.gz")); // 打开gzip文件输入流 BufferedInputStream bis = new BufferedInputStream(inStream); GZIPInputStream gis = new GZIPInputStream(bis)) { // 创建一个缓冲区用于逐行打印解压后的结果 BufferedReader br = new BufferedReader( new InputStreamReader(gis, StandardCharsets.UTF_8) ); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (Exception e){ e.printStackTrace(); } } } ``` 这段程序的作用是从本地机器上启动的一个伪分布式环境里找到名为 `/total.gz` 的压缩包,并将它的每一行输出至控制台。 3. **解释关键点** - `Configuration`: 该类包含了所有客户端和服务端之间的通讯设置信息。 - `FileSystem.get(Configuration)`:获取当前集群对应的FileSystem实例。 - `Path("/total.gz")`:指定了路径指向我们想要操作的具体资源位置。 - `BufferedInputStream` & `GZIPInputStream` 组合使用实现了对gzip格式的有效解析和快速访问。 4. **注意事项** - 跟随实际情况调整 URI 地址以及其他参数比如 port number 或者 hadoop version 版本等细节。 - 异常捕获很重要,在真实世界的应用场景下应当考虑更全面的日志记录机制以及用户友好的错误提示消息。 - 检查是否已安装正确的 Hadoop 客户端版本并且确保网络可达性良好。 5. **运行效果验证** 成功执行上述脚本之后应该可以在终端看到原始文本形式的内容而不是二进制编码表示的结果了! --- ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值