使用randomaccessfile类将一个文本文件中的内容逆序输出_Java IO2:RandomAccessFile
RandomAccessFile
RandomAccessFile類可以說是Java語言中功能最為豐富的文件訪問類,它提供了眾多的文件訪問方法。RandomAccessFile類支持"隨機訪問"方式,可以跳轉到文件的任意位置處讀寫數據。要訪問一個文件的時候,不想把文件從頭讀到尾,而是希望像訪問一個數據庫一樣地訪問一個文本文件,使用RandomAccessFile類是最佳選擇。
RandomAccessFile對象類中有個位置指示器,指向當前讀寫處的位置,當讀寫n個字節后,文件指示器將指向這n個字節后的下一個字節處。剛打開文件時,文件指示器指向文件的開頭處,可以移動文件指示器到新的位置,隨后的讀寫將從新的位置開始。
RandomAccessFile類在文件隨機(相對于順序)讀取時有很大的優勢,但該類僅限于操作文件,不能訪問其他得IO設備,如網絡、內存映像等。
RandomAccessFile構造方法
RandomAccessFile類為用戶提供了兩種構造方法:
1、RandomAccessFile(File file, String mode)
2、RandomAccessFile(String name, String mode)
其實第二種構造方法也是new一個File出來再調用第一種構造方法,建議使用第一種構造方法,因為第一篇文章就說了File是IO的基礎,有一個File不僅僅可以通過RandomAccessFile對文件進行操作,也可以通過File對象對文件進行操作。至于mode,Java給開發者提供了四種mode:
注意第二點"rw"模式,對rw模式的解釋意味著Java并不強求指定的路徑下一定存在某個文件,假如文件不存在,會自動創建
RandomAccessFile中的方法
RandomAccessFile中有如下一些常用方法:
RandomAccessFile使用實例
先定義一個實體類:
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會自動幫我們創建:
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();文件創建好了,D盤下也有該文件了,所以讀取一下,這里使用了一些小技巧來演示seek方法和skipBytes方法:
RandomAccessFile raf1 = new RandomAccessFile("D:/employee.txt", "r"); int len = 8; raf1.skipBytes(12); // 跳過第一個員工的信息,其姓名8字節,年齡4字節 System.out.println("第二個員工的信息:"); 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("第一個員工的信息:"); 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("第三個員工的信息:"); raf1.skipBytes(12); // 跳過第二個員工的信息 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();看一下運行結果:
第二個員工的信息: name:lisi age:24 第一個員工信息: name:zhangsan age:23 第三個員工信息: name:wangwu age:25可能有人奇怪,"zhangsan"加上一個int跳過12個字節可以理解,但是"lisi"、"wangwu"為什么加上int要跳過12個字節呢?明明"lisi"只有4個字節,"wangwu"只有6個字節啊。這個就涉及到一個"字節對齊"的問題了,有興趣的可以了解一下。另外,再說一下,RandomAccessFile使用完一定要及時close()。
原作者:五月的倉頡原文鏈接:Java IO2:RandomAccessFile
原出處:博客園
總結
以上是生活随笔為你收集整理的使用randomaccessfile类将一个文本文件中的内容逆序输出_Java IO2:RandomAccessFile的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【IIOT】欧姆龙PLC数采之NX/NJ
- 下一篇: 使用maven引入Apache poi