中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

java中怎么實現文件歸檔和還原

發布時間:2021-08-06 17:18:10 來源:億速云 閱讀:138 作者:Leah 欄目:編程語言

本篇文章為大家展示了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 pisorFileContentLen = fileContentLen / 1024; int remainderFileContentLen = fileContentLen % 1024; ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] pisorBuf = new byte[1024]; for(int i=0; i<pisorFileContentLen; ++i) {  fis.read(pisorBuf);  baos.write(pisorBuf); } 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); } }

上述內容就是java中怎么實現文件歸檔和還原,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

田阳县| 苗栗市| 天峨县| 香港| 博兴县| 清徐县| 富阳市| 佛山市| 城口县| 钟山县| 河北区| 沅陵县| 西丰县| 仲巴县| 龙岩市| 双柏县| 安泽县| 汨罗市| 吴堡县| 梅河口市| 灌阳县| 都兰县| 黄骅市| 柘荣县| 綦江县| 清远市| 罗山县| 封开县| 延津县| 青浦区| 青河县| 清徐县| 思茅市| 兴文县| 衡南县| 讷河市| 道真| 湘乡市| 凌源市| 三亚市| 罗定市|