Java對(duì)文件的隨機(jī)讀寫以及壓縮處理操作
Java中文件的隨機(jī)讀寫
Java.io 包提供了 RandomAccessFile 類用于隨機(jī)文件的創(chuàng)建和訪問(wèn)。使用這個(gè)類,可以跳轉(zhuǎn)到文件的任意位置讀寫數(shù)據(jù)。程序可以在隨機(jī)文件中插入數(shù)據(jù),而不會(huì)破壞該文件的其他數(shù)據(jù)。此外,程序也可以更新或刪除先前存儲(chǔ)的數(shù)據(jù),而不用重寫整個(gè)文件。
RandomAccessFile類是Object類的直接子類,包含兩個(gè)主要的構(gòu)造方法用來(lái)創(chuàng) 建RandomAccessFile 的對(duì)象,如表所示。
需要注意的是,mode 表示所創(chuàng)建的隨機(jī)讀寫文件的操作狀態(tài),其取值包括:
r:表示以只讀方式打開文件。
rw:表示以讀寫方式打開文件,使用該模式只用一個(gè)對(duì)象即可同時(shí)實(shí)現(xiàn)讀寫操作。
下表列出了 RandowAccessFile 類常用的方法及說(shuō)明。
【例】模仿系統(tǒng)日志,將數(shù)據(jù)寫入到文件尾部。
import java.io.*; class ep10_12{ public static void main(String args[]) throws IOException{ try{ BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); String s=in.readLine(); RandomAccessFile myFile=new RandomAccessFile("ep10_12.log","rw"); myFile.seek(myFile.length()); //移動(dòng)到文件結(jié)尾 myFile.writeBytes(s+"\n"); //寫入數(shù)據(jù) myFile.close(); } catch(IOException e){} } }
程序運(yùn)行后在目錄中建立一個(gè) ep10_12.log 的文件,每次運(yùn)行時(shí)輸入的內(nèi)容都會(huì)在該文件內(nèi)容的結(jié)尾處添加。
Java中文件的壓縮處理
Java.util.zip 包中提供了可對(duì)文件的壓縮和解壓縮進(jìn)行處理的類,它們繼承自字節(jié)流類OutputSteam 和 InputStream。其中 GZIPOutputStream 和 ZipOutputStream 可分別把數(shù)據(jù)壓縮成 GZIP 和 Zip 格式,GZIPInpputStream 和 ZipInputStream 又可將壓縮的數(shù)據(jù)進(jìn)行還原。
將文件寫入壓縮文件的一般步驟如下:
生成和所要生成的壓縮文件相關(guān)聯(lián)的壓縮類對(duì)象。
壓縮文件通常不只包含一個(gè)文件,將每個(gè)要加入的文件稱為一個(gè)壓縮入口,使用ZipEntry(String FileName)生成壓縮入口對(duì)象。
使用 putNextEntry(ZipEntry entry)將壓縮入口加入壓縮文件。
將文件內(nèi)容寫入此壓縮文件。
使用 closeEntry()結(jié)束目前的壓縮入口,繼續(xù)下一個(gè)壓縮入口。
將文件從壓縮文件中讀出的一般步驟如下:
生成和所要讀入的壓縮文件相關(guān)聯(lián)的壓縮類對(duì)象。
利用 getNextEntry()得到下一個(gè)壓縮入口。
【例】輸入若干文件名,將所有文件壓縮為“ep10_13.zip”,再?gòu)膲嚎s文件中解壓并顯示。
import java.io.*; import java.util.*; import java.util.zip.*; class ep10_13{ public static void main(String args[]) throws IOException{ FileOutputStream a=new FileOutputStream("ep10_13.zip"); //處理壓縮文件 ZipOutputStream out=new ZipOutputStream(new BufferedOutputStream(a)); for(int i=0;i<args.length;i++){ //對(duì)命令行輸入的每個(gè)文件進(jìn)行處理 System.out.println("Writing file"+args[i]); BufferedInputStream in=new BufferedInputStream(new FileInputStream(args[i])); out.putNextEntry(new ZipEntry(args[i])); //設(shè)置 ZipEntry 對(duì)象 int b; while((b=in.read())!=-1) out.write(b); //從源文件讀出,往壓縮文件中寫入 in.close(); } out.close(); //解壓縮文件并顯示 System.out.println("Reading file"); FileInputStream d=new FileInputStream("ep10_13.zip"); ZipInputStream inout=new ZipInputStream(new BufferedInputStream(d)); ZipEntry z; while((z=inout.getNextEntry())!=null){ //獲得入口 System.out.println("Reading file"+z.getName()); //顯示文件初始名 int x; while((x=inout.read())!=-1) System.out.write(x); System.out.println(); } inout.close(); } }
運(yùn)行后,在程序目錄建立一個(gè) ep10_13.zip 的壓縮文件,使用解壓縮軟件(如 WinRAR等),可以將其打開。命令提示符下,程序運(yùn)行結(jié)果如圖所示:
相關(guān)文章
springcloud?gateway實(shí)現(xiàn)簡(jiǎn)易版灰度路由步驟詳解
這篇文章主要為大家介紹了springcloud?gateway實(shí)現(xiàn)簡(jiǎn)易版灰度路由步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11Springboot 在普通類型注入Service或mapper
這篇文章主要介紹了Springboot 在普通類型注入Service或mapper,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11詳解如何開發(fā)一個(gè)MyBatis通用Mapper的輪子
因?yàn)橐恍┰?,例如:通用?shù)據(jù)權(quán)限控制、MyBatis-Plus好像不支持聯(lián)合主鍵等,我們不得不開發(fā)一個(gè)MyBatis通用Mapper的輪子。文中的示例代碼講解詳細(xì),需要的可以參考一下2022-12-12Java實(shí)現(xiàn)數(shù)據(jù)連接池Druid舉例
本文主要介紹了Java實(shí)現(xiàn)數(shù)據(jù)連接池Druid舉例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Java練習(xí)之潛艇小游戲的實(shí)現(xiàn)
這篇文章主要和大家分享一個(gè)Java小練習(xí)——利用Java編寫一個(gè)潛艇小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-03-03Java通過(guò)動(dòng)態(tài)代理實(shí)現(xiàn)一個(gè)簡(jiǎn)單的攔截器操作
這篇文章主要介紹了Java通過(guò)動(dòng)態(tài)代理實(shí)現(xiàn)一個(gè)簡(jiǎn)單的攔截器操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07詳解Java 反射和反射的應(yīng)用場(chǎng)景
這篇文章主要介紹了Java 反射和反射的應(yīng)用場(chǎng)景的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java反射的相關(guān)知識(shí),感興趣的朋友可以了解下2020-08-08JavaSwing基礎(chǔ)之Layout布局相關(guān)知識(shí)詳解
上次我們說(shuō)到View的Mearsure流程,今天接著說(shuō)說(shuō)layout. 關(guān)于layout,很多朋友知道它是負(fù)責(zé)布局的,那么具體是怎么布局的?viewGroup和view的layout方法又有什么不同?一起來(lái)看看吧,需要的朋友可以參考下2021-05-05