您的位置:首页 > 其它

24-IO流-59-IO流(RandomAccessFile-写入)

2015-08-11 16:32 197 查看
/*
* RandomAccessFile:
* 		随机访问文件,自身具备读写的方法。
* 		通过skipBytes(int x),seek(int x)来达到随机访问
*
* 管道流
* 	PipedInputStream和PipedOutputStream
* 		输入输出可以直接进行连接,通过结合线程使用。
*/

/**
* 这里先讲RandomAccessFile,查找API,发现其父类是Object,所以该类不是io体系中的子类。
* 该类随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组,其中有文件指针访问该数组中元素。
*
* 【RandomAccessFile类的特点】
* 		1.该对象既能读,又能写;
* 		2.该对象内部维护了一个byte数组,并通过指针可以操作数组中的元素;
* 		3.可以通过getFilePointer方法获取指针的位置,和通过seek方法设置指针的位置;
* 		4.其实该对象就是将字节输入流和输出流进行了封装;
* 		5.通过构造函数可以看出,该对象的源或者目的只能是文件。
* 		6.在RandomAccessFile raf = new RandomAccessFile("1.txt","rw")时候,判断文件1.txt是否存在,若不存在,
* 新建一个,若存在,则不创建(与传统输出流不同,传统输出流不管存不存在,直接覆盖)
*
* 【构造函数之一】
* public RandomAccessFile(File file,String mode) throws FileNotFoundException
*
* 创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。其中参数mode说明如下:
* mode 参数指定用以打开文件的访问模式。允许的值及其含意为:
* (1)"r"—— 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
* (2)"rw" ——打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
* (3)"rws" ——打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
* (4)"rwd" ——打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
*
* 对于参数mode,只能传入以上4个值,若传入别的,会抛出IllegalArgumentException
*
* 【方法摘要】
* 详见API
*/

package demo;

import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAcessFileDemo {

public static void main(String[] args) throws IOException {

writeFile();

}

public static void writeFile() throws IOException{

RandomAccessFile raf = new RandomAccessFile("ranacc.txt", "rw");

raf.write("张三".getBytes());//raf是字节流,不能直接写String类型数据,所以需要getBytes()转换成字节。

//raf.write(97);//发现ranacc.txt中出现的是a,其实write方法确实写入的是97,只是由于存进文本文件被自动解析成a,若存进别的文件,则有可能是97

/*
* 若将上述97改为609,即raf.write(609),ranacc.txt中依然是a,因为write方法只写入最低8个二进制位
*
* 用RandomAccessFile类中的特有方法writeInt()就可以按照完整的4个字节写入文件,如writeInt(609)则写入的是完整的609,
* 只是文本文件将609解析成了4字节的“看不懂的”内容。
*/
raf.writeInt(97);
raf.close();

/**
* 则在当前目录下生成ranacc.txt,其内容是:张三   a
* 因为writeInt()方法是写入完整的4个字节,而97解析成a是一个字节,前面加三个空格凑成4个字节。
*
* ranacc.txt文件大小为:8字节=中文2字节×2个中文+97被writeInt()方法写成4个字节
*/
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: