黑马程序员技术交流社区
标题:
JAVA IO中的RandomAccessFile
[打印本页]
作者:
权跃杰
时间:
2012-7-24 12:22
标题:
JAVA IO中的RandomAccessFile
有个例子,用writeInt()方法将age写入文件,用writeBytes将姓名写入文件,为什么最后我打开文件里面只有姓名的,年龄都没有。
还有readInt()方法中 文件里有张三 李四 王五三个人的年龄,为什么读的时候只读了一个年龄,是不是遇到其他的类型就停止读取了
作者:
刘海源
时间:
2012-7-24 12:25
很神奇奥
作者:
创出一片辉煌
时间:
2012-7-24 12:27
write方法如果没有进行位置改变有可能会从文件开始位置进行写出,因此可能会覆盖掉原有的内容。
readInt()方法本身就是读取一个int值,不会一次将多个int一起读入。
作者:
周玉龙
时间:
2012-7-24 12:55
RandomAccessFile(随机访问文件):自身具备读写的方法。不是流体系中的成员。
特点:
1,随机访问。其实就是不断的改变指针的位置。从指定的位子进行读和写。
2,操作的是文件。
3,既能读,又能写。
4,该对象中维护了一个大型的字节数组,可以通过指针进行操作。
5,可以通过getFilePointer获取指针的位置,可以通过seek设置指针的位子。
6,该对象中维护了读取和写入的字节流。
要想随机访问,必须要数据有规律。因为他是通过确定指针的位置来用不同的访问的方法。如readInt,readByte
RandomAccessFile ra = new RandomAccessFile("c:\\random.txt","rw");
如果文件不存在,则会创建,如果文件存在,不覆盖。
writeInt();可以保证字节原样性。
他可以对数据进行修改,而不覆盖文件。
通过下面的例子来说明下。
package com.itheima.io
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFileDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
writeFile();
// readFile();
randomWrite();
}
/*
* 通过randomaccessFile类,完成个人信息的存储(姓名,年龄)。
*/
public static void writeFile() throws IOException {
// 1,创建RandomAccessFile对象。明确具体的文件,和具体的模式。rw.
/*
* 如果文件不存在,则会创建, 如果文件存在,不会覆盖。
*/
RandomAccessFile raf = new RandomAccessFile("random.txt", "rw");
raf.write("张三".getBytes());
raf.writeInt(97);
raf.write("旺财".getBytes());
raf.writeInt(99);
raf.write("小明".getBytes());
raf.writeInt(102);
raf.close();
}
public static void readFile() throws IOException {
// 定义对象读取文件。
RandomAccessFile raf = new RandomAccessFile("random.txt", "r");
// 设置指针的位置,通过seek方法。一组加起来就是八个字节。8*0表示0位置的张三,8*1表示第二个我们存储的李四。。。而不能像你那样直一次性获得,
raf.seek(8 * 2);
// 获取一下文件指针
System.out.println("pos:" + raf.getFilePointer());
byte[] buf = new byte[4];
// 读取四个存储到buf中。为什么是四个了,因为我们用的编码是GBK,一个汉字占两个字节。两个汉字占四个。而且Int类型的数也是占四个字节。
//所以每四个一起编译就不会产生错误
raf.read(buf);
String name = new String(buf);// 字节数组转成字符串。
System.out.println("pos:" + raf.getFilePointer());
int age = raf.readInt();
System.out.println(name + ":" + age);
System.out.println("pos:" + raf.getFilePointer());
raf.close();
}
// 随机写。
public static void randomWrite() throws IOException {
RandomAccessFile raf = new RandomAccessFile("random.txt", "rw");
raf.seek(8*5);
System.out.println("pos:"+raf.getFilePointer());
raf.write("哦也".getBytes());
raf.writeInt(113);
raf.close();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2