日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

使用randomaccessfile类将一个文本文件中的内容逆序输出_Java IO2:RandomAccessFile

發(fā)布時(shí)間:2023/12/10 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用randomaccessfile类将一个文本文件中的内容逆序输出_Java IO2:RandomAccessFile 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

RandomAccessFile

RandomAccessFile類可以說是Java語(yǔ)言中功能最為豐富的文件訪問類,它提供了眾多的文件訪問方法。RandomAccessFile類支持"隨機(jī)訪問"方式,可以跳轉(zhuǎn)到文件的任意位置處讀寫數(shù)據(jù)。要訪問一個(gè)文件的時(shí)候,不想把文件從頭讀到尾,而是希望像訪問一個(gè)數(shù)據(jù)庫(kù)一樣地訪問一個(gè)文本文件,使用RandomAccessFile類是最佳選擇。

RandomAccessFile對(duì)象類中有個(gè)位置指示器,指向當(dāng)前讀寫處的位置,當(dāng)讀寫n個(gè)字節(jié)后,文件指示器將指向這n個(gè)字節(jié)后的下一個(gè)字節(jié)處。剛打開文件時(shí),文件指示器指向文件的開頭處,可以移動(dòng)文件指示器到新的位置,隨后的讀寫將從新的位置開始。

RandomAccessFile類在文件隨機(jī)(相對(duì)于順序)讀取時(shí)有很大的優(yōu)勢(shì),但該類僅限于操作文件,不能訪問其他得IO設(shè)備,如網(wǎng)絡(luò)、內(nèi)存映像等。

RandomAccessFile構(gòu)造方法

RandomAccessFile類為用戶提供了兩種構(gòu)造方法:

1、RandomAccessFile(File file, String mode)

2、RandomAccessFile(String name, String mode)

其實(shí)第二種構(gòu)造方法也是new一個(gè)File出來再調(diào)用第一種構(gòu)造方法,建議使用第一種構(gòu)造方法,因?yàn)榈谝黄恼戮驼f了File是IO的基礎(chǔ),有一個(gè)File不僅僅可以通過RandomAccessFile對(duì)文件進(jìn)行操作,也可以通過File對(duì)象對(duì)文件進(jìn)行操作。至于mode,Java給開發(fā)者提供了四種mode:

注意第二點(diǎn)"rw"模式,對(duì)rw模式的解釋意味著Java并不強(qiáng)求指定的路徑下一定存在某個(gè)文件,假如文件不存在,會(huì)自動(dòng)創(chuàng)建

RandomAccessFile中的方法

RandomAccessFile中有如下一些常用方法:

RandomAccessFile使用實(shí)例

先定義一個(gè)實(shí)體類:

public class Employee {private String name;private int age;private final static int LEN = 8;public Employee(){}public Employee(String name, int age){if (name.length() > LEN){name = name.substring(0, 8);}else{while (name.length() < LEN){name = name + "u0000";}}this.name = name;this.age = age;}public String getName(){return name;}public void setName(String name){this.name = name;}public int getAge(){return age;}public void setAge(int age){this.age = age;} }

第一部分,寫文件,該文件在路徑下并沒有,所以Java會(huì)自動(dòng)幫我們創(chuàng)建:

Employee e1 = new Employee("zhangsan", 23); Employee e2 = new Employee("lisi", 24); Employee e3 = new Employee("wangwu", 25);RandomAccessFile raf0 = new RandomAccessFile("D:/employee.txt", "rw"); raf0.writeBytes(e1.getName()); raf0.writeInt(e1.getAge()); raf0.writeBytes(e2.getName()); raf0.writeInt(e2.getAge()); raf0.writeBytes(e3.getName()); raf0.writeInt(e3.getAge()); raf0.close();

文件創(chuàng)建好了,D盤下也有該文件了,所以讀取一下,這里使用了一些小技巧來演示seek方法和skipBytes方法:

RandomAccessFile raf1 = new RandomAccessFile("D:/employee.txt", "r"); int len = 8; raf1.skipBytes(12); // 跳過第一個(gè)員工的信息,其姓名8字節(jié),年齡4字節(jié) System.out.println("第二個(gè)員工的信息:"); String str = ""; for (int i = 0; i < len; i++) {str = str + (char)raf1.readByte(); } System.out.println("name:" + str); System.out.println("age:" + raf1.readInt()); System.out.println("第一個(gè)員工的信息:"); raf1.seek(0); str = ""; for (int i = 0; i < len; i++) {str = str + (char)raf1.readByte(); } System.out.println("name:" + str); System.out.println("age:" + raf1.readInt()); System.out.println("第三個(gè)員工的信息:"); raf1.skipBytes(12); // 跳過第二個(gè)員工的信息 str = ""; for (int i = 0; i < len; i++) {str = str + (char)raf1.readByte(); } System.out.println("name:" + str.trim()); System.out.println("age:" + raf1.readInt()); raf1.close();

看一下運(yùn)行結(jié)果:

第二個(gè)員工的信息: name:lisi age:24 第一個(gè)員工信息: name:zhangsan age:23 第三個(gè)員工信息: name:wangwu age:25

可能有人奇怪,"zhangsan"加上一個(gè)int跳過12個(gè)字節(jié)可以理解,但是"lisi"、"wangwu"為什么加上int要跳過12個(gè)字節(jié)呢?明明"lisi"只有4個(gè)字節(jié),"wangwu"只有6個(gè)字節(jié)啊。這個(gè)就涉及到一個(gè)"字節(jié)對(duì)齊"的問題了,有興趣的可以了解一下。另外,再說一下,RandomAccessFile使用完一定要及時(shí)close()。

原作者:五月的倉(cāng)頡
原文鏈接:Java IO2:RandomAccessFile
原出處:博客園

總結(jié)

以上是生活随笔為你收集整理的使用randomaccessfile类将一个文本文件中的内容逆序输出_Java IO2:RandomAccessFile的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。