91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java實現文件歸檔和還原的方法

發布時間:2021-04-15 10:15:17 來源:億速云 閱讀:341 作者:小新 欄目:編程語言

小編給大家分享一下java實現文件歸檔和還原的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

具體內容如下

基本思路: 

文件歸檔,換句話就是把多個文件的字節存到一個文件中。為此我們必須定義存儲格式,才能從包中把文件重新抽出來。

文件由文件名和內容組成。要想完整的還原文件,我們必須同時存下這兩個東西,而文件名和內容的字節大小我們都是不知道的,為此我們必須要用固定大小的空間存儲它們的大小。

存儲格式

java實現文件歸檔和還原的方法

代碼實現

因為文件內容大小是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;
 }
}

歸檔類

package wfb.binSama;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import util.DataUtil;

/**
 * @author binSama
 */
public class Archive {
 
 public static void archive(File[] srcs,File tar) {//歸檔
 try {
 FileOutputStream fos = new FileOutputStream(tar);
 for(int i=0; i<srcs.length; ++i) {
 //獲得文件名
 byte[] fileName = srcs[i].getName().getBytes();
 //獲得文件名長度
 byte fileNameLen = (byte)fileName.length;
 //獲得文件內容
 FileInputStream fis = new FileInputStream(srcs[i]);
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 int len = -1;
 byte[] buf = new byte[1024];
 while((len = fis.read(buf)) != -1) {
  baos.write(buf, 0, len);
 }
 baos.close();
 fis.close();
 byte[] fileContent = baos.toByteArray();
 //獲得文件內容長度
 byte[] fileContentLen = DataUtil.int2bytes(fileContent.length);
 //寫入
 fos.write(fileNameLen);
 fos.write(fileName);
 fos.write(fileContentLen);
 fos.write(fileContent);
 }
 fos.close();
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
 
 public static void unArchive(File src) {//解檔到當前文件夾
 try {
 FileInputStream fis = new FileInputStream(src);
 int fileNameLen = -1;
 while((fileNameLen = fis.read()) != -1){
 byte[] byteFileName = new byte[fileNameLen];
 fis.read(byteFileName);
 String fileName = src.getParent() +"\\"+ new String(byteFileName);
 FileOutputStream fos = new FileOutputStream(fileName);
 byte[] byteFileContentLen = new byte[4];
 fis.read(byteFileContentLen);
 int fileContentLen = DataUtil.bytes2int(byteFileContentLen);
 int divisorFileContentLen = fileContentLen / 1024;
 int remainderFileContentLen = fileContentLen % 1024;
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 byte[] divisorBuf = new byte[1024];
 for(int i=0; i<divisorFileContentLen; ++i) {
  fis.read(divisorBuf);
  baos.write(divisorBuf);
 }
 byte[] remainderBuf = new byte[remainderFileContentLen];
 fis.read(remainderBuf);
 baos.write(remainderBuf);
 baos.close();
 byte[] fileContent = baos.toByteArray();
 fos.write(fileContent);
 }
 fis.close();
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
}

測試:

package wfb.binSama;

import java.io.File;

public class Test {
 @org.junit.Test
 public void test() {
 File[] files = new File[3];
 files[0] = new File("E:\\waster\\Archiver1\\1.txt");
 files[1] = new File("E:\\waster\\Archiver1\\2.png");
 files[2] = new File("E:\\waster\\Archiver1\\3.txt");
 File bsm = new File("E:\\waster\\Archiver2\\archive.bsm");
 Archive.archive(files, bsm);
 Archive.unArchive(bsm);
 }
 
}

現象

成功在E:\waster\Archiver2文件夾生成了archive.bsm歸檔文件,并解檔出1.txt 2.png 3.txt三個文件。

java實現文件歸檔和還原的方法

以上是“java實現文件歸檔和還原的方法”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

息烽县| 枣庄市| 贡觉县| 白城市| 阿荣旗| 穆棱市| 奎屯市| 文昌市| 信丰县| 武安市| 隆安县| 长兴县| 修文县| 扬州市| 城口县| 苏尼特右旗| 井陉县| 河曲县| 宁国市| 博爱县| 叙永县| 宣威市| 体育| 满洲里市| 宁德市| 桐乡市| 崇礼县| 凤阳县| 宜兰市| 江孜县| 吴川市| 平阴县| 仪征市| 达孜县| 巴南区| 瓦房店市| 任丘市| 隆回县| 巴林右旗| 博客| 濉溪县|