java的file操作2

1.java.io.RandomAccessFile:該類設(shè)計用來專門讀寫文件數(shù)據(jù)。其基于指針進行讀寫娶聘,即:總是在指針當(dāng)前位置讀或?qū)懽止?jié)蛤克。RAF有兩種常用創(chuàng)建模式:"r":只讀模式,"rw":讀寫模式距淫。

public class RandomAccessFileDemo {

? ? public static void main(String[] args) throws IOException {

? ? ? ? /*

? ? ? ? * RAF常用的構(gòu)造方法:

? ? ? ? * RandomAccessFile(String path,String mode)

? ? ? ? * RandomAccessFile(File file,String mode)

? ? ? ? * mode:操作模式笨觅,只讀或讀寫

? ? ? ? */

? ? ? ? RandomAccessFile raf

? ? ? ? ? ? = new RandomAccessFile(

? ? ? ? ? ? ? ? "./raf.dat","rw"

? ? ? ? ? ? );

? ? ? ? /*

? ? ? ? * void write(int d)

? ? ? ? * 寫出一個字節(jié)拦耐,將給定的int值對應(yīng)的2進

? ? ? ? * 制的“低八位”寫入文件

? ? ? ? *? ? ? ? ? ? ? ? ? ? ? ? ? ? vvvvvvvv

? ? ? ? * 00000000 00000000 00000001 00000001

? ? ? ? *

? ? ? ? * 11111111 11111111 11111111 11111111

? ? ? ? */

? ? ? ? raf.write(1);

? ? ? ? System.out.println("寫出完畢!");

? ? ? ? raf.close();

? ? }

}

2.讀取一個字節(jié)。

public class ReadDemo {

? ? public static void main(String[] args) throws IOException {

? ? ? ? RandomAccessFile raf

? ? ? ? ? ? = new RandomAccessFile(

? ? ? ? ? ? ? ? "./raf.dat","r"

? ? ? ? ? ? );

? ? ? ? /*

? ? ? ? * int read()

? ? ? ? * 讀取1個字節(jié)见剩,并以int形式返回杀糯。

? ? ? ? * 若返回值為-1.則表示讀取到了文件末尾。

? ? ? ? *? ? ? ? ? ? ? ? ? ? ? ? ? ? vvvvvvvv

? ? ? ? * 00000000 00000000 00000000 00000001

? ? ? ? */

? ? ? ? int d = raf.read();

? ? ? ? System.out.println(d);

? ? ? ? d = raf.read();

? ? ? ? System.out.println(d);

? ? ? ? raf.close();

? ? }

}

3.復(fù)制文件炮温。

public class CopyDemo {

? ? public static void main(String[] args) throws IOException {

? ? ? ? /*

? ? ? ? * 復(fù)制當(dāng)前目錄中的img.png

? ? ? ? */

? ? ? ? RandomAccessFile src

? ? ? ? ? ? = new RandomAccessFile(

? ? ? ? ? ? ? ? "./music.mp3","r"

? ? ? ? ? ? );

? ? ? ? RandomAccessFile desc

? ? ? ? ? ? = new RandomAccessFile(

? ? ? ? ? ? ? ? "./music_cp.mp3","rw"

? ? ? ? ? ? );

? ? ? ? int d = -1;//記錄每次讀取的字節(jié)數(shù)據(jù)

? ? ? ? long start = System.currentTimeMillis();

? ? ? ? while((d = src.read())!=-1){

? ? ? ? ? ? desc.write(d);

? ? ? ? }

? ? ? ? long end = System.currentTimeMillis();

? ? ? ? System.out.println(

? ? ? ? ? ? "復(fù)制完畢!耗時:"+(end-start)+"ms");

? ? ? ? src.close();

? ? ? ? desc.close();

? ? }

}

4.提高每次讀寫的數(shù)據(jù)量火脉,減少實際讀寫的次數(shù),可以提高讀寫效率對于硬盤(磁盤)而言柒啤,隨機讀寫效率差是缺點。但是硬盤的塊讀寫效率還是可以保證的畸颅。隨機讀寫:單字節(jié)讀寫担巩。塊讀寫:一組一組字節(jié)讀寫。

public class CopyDemo2 {

? ? public static void main(String[] args) throws IOException {

? ? ? ? RandomAccessFile src

? ? ? ? ? ? = new RandomAccessFile(

? ? ? ? ? ? ? ? "./DG.exe","r"

? ? ? ? ? ? );

? ? ? ? RandomAccessFile desc

? ? ? ? ? ? = new RandomAccessFile(

? ? ? ? ? ? ? ? "./DG_CP1.exe","rw"

? ? ? ? ? ? );

? ? ? ? /*

? ? ? ? * int read(byte[] data)

? ? ? ? * 一次性讀取給定的字節(jié)數(shù)組長度的字節(jié)量

? ? ? ? * 并存入到該數(shù)組中没炒,返回值為實際讀取到

? ? ? ? * 的字節(jié)量涛癌。若返回值為-1,則是文件末尾

? ? ? ? *

? ? ? ? * void write(byte[] data)

? ? ? ? * 一次性將給定的字節(jié)數(shù)組中所有字節(jié)寫出

? ? ? ? *

? ? ? ? * void write(byte[] data,int index,int len)

? ? ? ? * 將給定的字節(jié)數(shù)組從下標(biāo)index處開始的連續(xù)len

? ? ? ? * 個字節(jié)一次性寫出

? ? ? ? *

? ? ? ? * 1 byte = 8位2進制

? ? ? ? * 1 kb = 1024 byte

? ? ? ? * 1 mb = 1024 kb

? ? ? ? * 1 gb = 1024 mb

? ? ? ? * 1 tb = 1024 gb

? ? ? ? *

? ? ? ? */

? ? ? ? //10 kb

? ? ? ? byte[] buf = new byte[1024*10];

? ? ? ? int len = -1;//表示每次實際讀取到的字節(jié)量

? ? ? ? long start = System.currentTimeMillis();

? ? ? ? while((len = src.read(buf))!=-1){

//? ? ? ? ? ? desc.write(buf);

? ? ? ? ? ? desc.write(buf,0,len);

? ? ? ? }

? ? ? ? long end = System.currentTimeMillis();

? ? ? ? System.out.println("復(fù)制完畢!耗時:"+(end-start)+"ms");

? ? ? ? src.close();

? ? ? ? desc.close();

? ? }

}

5.讀寫基本類型數(shù)據(jù)送火,以及RAF指針的操作拳话。

public class RandomAccessFileDemo2 {

? ? public static void main(String[] args) throws IOException {

? ? ? ? RandomAccessFile raf

? ? ? ? ? ? = new RandomAccessFile(

? ? ? ? ? ? ? ? "raf.dat","rw"

? ? ? ? ? ? );

? ? ? ? //獲取指針位置

? ? ? ? long pos = raf.getFilePointer();

? ? ? ? System.out.println("pos:"+pos);

? ? ? ? //向文件中寫入int最大值

? ? ? ? int max = Integer.MAX_VALUE;

? ? ? ? /*

? ? ? ? *? ? ? ? ? ? ? ? ? ? ? ? ? ? vvvvvvvv

? ? ? ? * 01111111 11111111 11111111 11111111

? ? ? ? * max>>>24

? ? ? ? * 00000000 00000000 00000000 01111111

? ? ? ? */

? ? ? ? raf.write(max>>>24);

? ? ? ? System.out.println("pos:"+raf.getFilePointer());

? ? ? ? raf.write(max>>>16);

? ? ? ? raf.write(max>>>8);

? ? ? ? raf.write(max);

? ? ? ? System.out.println("pos:"+raf.getFilePointer());

? ? ? ? /*

? ? ? ? * RAF提供了方便我們寫出基本類型的相關(guān)方法

? ? ? ? *

? ? ? ? */

? ? ? ? //一次性將給定的int值4字節(jié)全部寫出

? ? ? ? raf.writeInt(max);

? ? ? ? System.out.println("pos:"+raf.getFilePointer());

? ? ? ? raf.writeLong(123L);

? ? ? ? System.out.println("pos:"+raf.getFilePointer());

? ? ? ? raf.writeDouble(123.123);

? ? ? ? System.out.println("pos:"+raf.getFilePointer());

? ? ? ? /*

? ? ? ? * void seek(long pos)

? ? ? ? * 移動指針到指定位置。

? ? ? ? */

? ? ? ? raf.seek(0);

? ? ? ? System.out.println("pos:"+raf.getFilePointer());

? ? ? ? //讀取? EOF end of file

? ? ? ? int d = raf.readInt();

? ? ? ? System.out.println(d);

? ? ? ? System.out.println("pos:"+raf.getFilePointer());

? ? ? ? //讀取long

? ? ? ? raf.seek(8);

? ? ? ? long l = raf.readLong();

? ? ? ? System.out.println("long:"+l);

? ? ? ? System.out.println("pos:"+raf.getFilePointer());

? ? ? ? double dou = raf.readDouble();

? ? ? ? System.out.println("double:"+dou);

? ? ? ? System.out.println("寫出完畢!");

? ? ? ? raf.close();

? ? }

}

6.讀取字符串种吸。

public class ReadStringDemo {

? ? public static void main(String[] args) throws IOException {

? ? ? ? RandomAccessFile raf

? ? ? ? ? ? = new RandomAccessFile(

? ? ? ? ? ? ? ? "raf.txt","r"

? ? ? ? ? ? );

? ? ? ? byte[] data = new byte[(int)raf.length()];

? ? ? ? raf.read(data);

? ? ? ? /*

? ? ? ? * String提供了一組重載的構(gòu)造方法

? ? ? ? * 可以將給定的字節(jié)數(shù)組按照指定字符集還原為字符串

? ? ? ? */

? ? ? ? String str = new String(data,"GBK");

? ? ? ? System.out.println(str);

? ? ? ? raf.close();

? ? }

}

7.寫出字符串操作弃衍。

public class WriteStringDemo {

? ? public static void main(String[] args) throws IOException {

? ? ? ? /*

? ? ? ? * 在相對路徑中"./"可以不寫,不寫默認也是

? ? ? ? * 在當(dāng)前目錄中

? ? ? ? */

? ? ? ? RandomAccessFile raf

? ? ? ? ? ? = new RandomAccessFile(

? ? ? ? ? ? ? ? "raf.txt","rw"

? ? ? ? ? ? );

? ? ? ? /*

? ? ? ? * String提供的方法:

? ? ? ? * byte[] getBytes()

? ? ? ? * 將當(dāng)前字符串按照系統(tǒng)默認字符集轉(zhuǎn)換為

? ? ? ? * 一組字節(jié)坚俗。

? ? ? ? *

? ? ? ? * byte[] getBytes(String csn)

? ? ? ? * 將當(dāng)前字符串按照指定字符集轉(zhuǎn)換為

? ? ? ? * 一組字節(jié)镜盯。推薦使用這種方式轉(zhuǎn)換字符串

? ? ? ? * 因為按照系統(tǒng)默認字符集轉(zhuǎn)換會導(dǎo)致跨平

? ? ? ? * 臺出現(xiàn)亂碼問題

? ? ? ? *

? ? ? ? *

? ? ? ? * GBK:國標(biāo)編碼岸裙,中文占2字節(jié)

? ? ? ? * UTF-8:萬國碼,對unicode進行編碼,變長編碼集

? ? ? ? *? ? ? 英文1字節(jié)速缆,中文3字節(jié)

? ? ? ? * ISO8859-1:歐洲編碼集降允,不支持中文。

? ? ? ? */

? ? ? ? String str = "讓我再看你一遍艺糜,從南到北剧董。";

? ? ? ? byte[] data = str.getBytes("GBK");

? ? ? ? raf.write(data);

? ? ? ? raf.write(

? ? ? ? ? ? "像是北五環(huán)路,蒙住的雙眼破停。".getBytes("GBK")

? ? ? ? );

? ? ? ? System.out.println("寫出完畢!");

? ? ? ? raf.close();

? ? }

}

8.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末送滞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子辱挥,更是在濱河造成了極大的恐慌犁嗅,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晤碘,死亡現(xiàn)場離奇詭異褂微,居然都是意外死亡,警方通過查閱死者的電腦和手機园爷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來童社,“玉大人求厕,你說我怎么就攤上這事∪怕ィ” “怎么了呀癣?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長弦赖。 經(jīng)常有香客問我项栏,道長,這世上最難降的妖魔是什么蹬竖? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任沼沈,我火速辦了婚禮,結(jié)果婚禮上币厕,老公的妹妹穿的比我還像新娘列另。我一直安慰自己,他們只是感情好旦装,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布页衙。 她就那樣靜靜地躺著,像睡著了一般同辣。 火紅的嫁衣襯著肌膚如雪拷姿。 梳的紋絲不亂的頭發(fā)上惭载,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音响巢,去河邊找鬼描滔。 笑死,一個胖子當(dāng)著我的面吹牛踪古,可吹牛的內(nèi)容都是我干的含长。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼伏穆,長吁一口氣:“原來是場噩夢啊……” “哼拘泞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起枕扫,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤陪腌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后烟瞧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诗鸭,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年参滴,在試婚紗的時候發(fā)現(xiàn)自己被綠了强岸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡砾赔,死狀恐怖蝌箍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情暴心,我是刑警寧澤妓盲,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站酷勺,受9級特大地震影響本橙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脆诉,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贷币。 院中可真熱鬧击胜,春花似錦、人聲如沸役纹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽促脉。三九已至辰斋,卻和暖如春策州,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宫仗。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工够挂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人藕夫。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓孽糖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親毅贮。 傳聞我的和親對象是個殘疾皇子办悟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容