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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2023/12/10 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。