本节课我学习的主要内容有:
1.什么是RandomAccessFile
什么是RandomAccessFile:
它能够同时读写文件,有点c/c++那味,在特定情况下比较好用。
不属于Input/OutputStream结构层次的成员。
访问模式:
r:以只读的模式打开文件。
rw:以读写模式打开文件,如果文件不存在,则创建该文件。
rws:对文件内容进行修改,元数据会立即写入存储设备之外,其余功能的基本与rw相同。一般有缓冲。
rwd:对文件内容修改会立即写入存储设备,其余功能与rw基本相同。一般有缓冲区。
构造方法:
RandomAccessFile(File file,String mode);
RandomAccessFile(String pathname,String mode);
常用方法:
length() 返回当前文件长度。
setLength() 增加减少文件长度减少会忽略长度之外的内容。
read/writeXXX() 读写基本数据类型
read/Line/UTF() 读字符串
writeChars/Bytes/UTF() 写字符、字节、字符串
getFilePointer() 返回文件中当前指针的位置(偏移量)
seek() 定位文件的某个位置(调整指针)。
Test01类(运用RandomAccessFile来读写文件):
package LessonForIO06;
import java.io.*;
class Booking
{
public static void initBook(File file, String name, int price)
{
try
{
RandomAccessFile raf1 = new RandomAccessFile(file, "rw");
raf1.seek(raf1.length());
raf1.writeUTF(name);
raf1.writeInt(price);
raf1.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
public static void readInf(File file)
{
try
{
RandomAccessFile raf2 = new RandomAccessFile(file, "rw");
while (true)
{
if (raf2.getFilePointer() == raf2.length())//如果指针到文件最大长度那么就退出读取循环
{
raf2.close();
break;//
}else
{
String name = raf2.readUTF();
int price = raf2.readInt();
System.out.println("订单的商品名称:"+name+" 价格:"+price);
//获取到当前文件的读写指针位置。
//设置指针到末尾
raf2.seek(raf2.getFilePointer());//设置读取指针到文件末尾
}
}
} catch (IOException e)
{
e.printStackTrace();
}
}
}
public class Test01
{
public static void main(String[] args)
{
File file = new File("Test06.txt");
Booking.initBook(file, "zlm", 20);
Booking.initBook(file, "hlw", 20);
Booking.initBook(file, "zyg", 20);
System.out.println("第一次读取");
Booking.readInf(file);
Booking.initBook(file, "ltw", 20);
Booking.initBook(file, "sr", 20);
System.out.println("第二次读取");
Booking.readInf(file);
}
}
本篇部分文字来源于:
咕嘟咖啡杨海滨老师 — 《java编程语言高级特性》
在这里十分感谢老师能够给我带来学习的激情。
2020.11.14
本文章是本人学习笔记,不进行任何商用所以不支持转载请理解!也请别拿去商用!
如果觉得对你有帮助那么欢迎你随时来回顾!
只为记录本人学习历程。
毕