网站首页 > java教程 正文
使用java访问文件,我们可以从文件读取以及写入文件。使用文件输入和输出流的读取和写入是顺序过程。使用随机访问文件,我们可以在文件中的任何位置读取或写入。
RandomAccessFile类的一个对象可以进行随机文件访问。我们可以读/写字节和所有原始类型的值到一个文件。
RandomAccessFile可以使用其readUTF()和writeUTF()方法处理字符串。
RandomAccessFile类不在InputStream和OutputStream类的类层次结构中。
模式
可以在四种不同的访问模式中创建随机访问文件。访问模式值是一个字符串。它们列出如下:
- r"
文件以只读模式打开。
- "rw"
该文件以读写模式打开。 如果文件不存在,则创建该文件。
- "rws"
该文件以读写模式打开。 对文件的内容及其元数据的任何修改立即被写入存储设备。
- "rwd"
该文件以读写模式打开。 对文件内容的任何修改立即写入存储设备。
读和写
我们通过指定文件名和访问模式来创建RandomAccessFile类的实例。
RandomAccessFile raf = new RandomAccessFile("randomtest.txt", "rw");
随机访问文件具有文件指针,当我们从其读取数据或向其写入数据时,该文件指针向前移动。
文件指针是我们下一次读取或写入将开始的光标。
其值指示光标与文件开头的距离(以字节为单位)。
我们可以通过使用其getFilePointer()方法来获取文件指针的值。
当我们创建一个RandomAccessFile类的对象时,文件指针被设置为零。
我们可以使用seek()方法将文件指针设置在文件中的特定位置。
RandomAccessFile的length()方法返回文件的当前长度。我们可以通过使用其setLength()方法来扩展或截断文件。
import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; public class Main { public static void main(String[] args) throws IOException { String fileName = "randomaccessfile.txt"; File fileObject = new File(fileName); if (!fileObject.exists()) { initialWrite(fileName); } readFile(fileName); readFile(fileName); } public static void readFile(String fileName) throws IOException { RandomAccessFile raf = new RandomAccessFile(fileName, "rw"); int counter = raf.readInt(); String msg = raf.readUTF(); System.out.println(counter); System.out.println(msg); incrementReadCounter(raf); raf.close(); } public static void incrementReadCounter(RandomAccessFile raf) throws IOException { long currentPosition = raf.getFilePointer(); raf.seek(0); int counter = raf.readInt(); counter++; raf.seek(0); raf.writeInt(counter); raf.seek(currentPosition); } public static void initialWrite(String fileName) throws IOException { RandomAccessFile raf = new RandomAccessFile(fileName, "rw"); raf.writeInt(0); raf.writeUTF("Hello world!"); raf.close(); } }
猜你喜欢
- 2024-10-06 一文搞定java.lang.Class.isInstance和instanceof的区别
- 2024-10-06 如何使用Java 文件系统 File类?(java files类)
- 2024-10-06 Spring问题之提示文件不存在处理it does not exist
- 2024-10-06 Java中类加载器的工作原理(java中类加载器有几种)
- 2024-10-06 java常见问题(java常见问题及答案)
- 2024-10-06 「Java」常用的文件操作(java 文件处理)
- 2024-10-06 JAVA中的文件操作2-如何读写文件(java高并发读写文件)
- 2024-10-06 bitmap算法:如何在20亿个非负整数中如何判断一个数是否存在?
- 2024-10-06 Java 如何验证文件名的有效性?(java判断文件名包含字符串)
- 2024-10-06 java中读取properties文件最简单的方法
你 发表评论:
欢迎- 最近发表
-
- 你真的会用 Java 中的线程池吗?多个企业级线程池工具类封装实践
- 线程池的实现原理、优点与风险、以及四种线程池实现
- Java线程池ThreadPoolExecutor实现原理剖析
- 深入分析线程池的实现原理(线程池是干嘛的)
- 一文搞懂JAVA线程池工作原理(java线程池的工作流程)
- Java线程池的工作原理(java线程池的实现原理)
- 5分钟读懂C#中TcpClient、TcpListener和Socket三个类的角色
- JVM对象的创建过程(jvm运行过程中创建的对象一般存放在方法区)
- 对象组成与Java内存模型JMM分析(java对象在内存中存储的结构)
- JVM对象内存分配详细过程(栈上分配->TLAB->老年代->Eden区)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)