用java实现文件归档和还原

本文介绍如何使用Java实现文件归档,通过定义存储格式,将多个文件的字节合并到一个文件中。归档过程中,文件名和内容被存储,包括文件大小信息。DataUtil类用于字节转换,归档类实现具体操作,经过测试,成功生成归档文件并能正确还原文件。

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

基本思路:

    文件归档,换句话就是把多个文件的字节存到一个文件中。为此我们必须定义存储格式,才能从包中把文件重新抽出来。
    文件由文件名和内容组成。要想完整的还原文件,我们必须同时存下这两个东西,而文件名和内容的字节大小我们都是不知道的,为此我们必须要用固定大小的空间存储它们的大小。

存储格式

名称 大小(单位字节)
文件名大小(fileNameLen) 1
文件名(fileName) fileNameLen
文件内容大小(fileContentLen) 4
文件内容(fileContent) fileContentLen

代码实现

因为文件内容大小是4个字节(也就是int型),我们要把它存到文件,就要转化成字节数组。我们规定低位靠前,高位靠后。按照这种格式封装转换操作与一个基础类DataUtil中。

DataUtil代码

package util;

public class DataUtil {
    
    
	public static byte[] int2bytes(int src) {
    
    
		byte[] rt = new byte[4];
		for(int i=0; i<4; ++i) {
    
    
			rt[i] = (byte)(src>>(i*8));
		}
		return rt;
	}
	public static int bytes2int(byte[] src) {
    
    
		int rt = 0;
		for(int i=0; i<4; ++i) {
    
    
			rt |= (src[i]&0xFF)<<(i*8);
			//字节在进行移位运算时,首先会被转换成int类型,
			//此时若字节的符号位为1,它前面就会补全1,比如:
			//0x80在byte类型时是-128,而转换成int,它的值还是
			//-128,即0xffffff80,而我们移位运算想要的是
			//0x00000080,即前面补全0,跟我们拆时一致。为此,
			//我们让它与0xFF相与,从0xffffff80变为0x00000080。
		}
		return rt;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值