IO流引入
1.图灵模型
2.IO流概述
以应用程序为参照物,读取数据为输入流(input),写数据为输出流OutPut,大量输入输出数据简称IO流
IO流原理
IO流分类
1.读写的文件分类
①二进制文件:打开之后是乱码,或者是16进制无法生成文字的文件。例如:视频,音频,图片,exe,dll文件等
尔文本文件:打开文件内容可直接阅读。例如:记事本,java程序,网页文件
2.IO流读取数据内容分类
①字符流:读取的内容最小单位是char类型
②字节流:读取内容的最小单位是byte类型
IO流的访问方式分类
1.随机读写文件:文件中存在一个游标,通过移动游标的方式,改变读写数据的位置
2.顺序读写:每次都从文件开始的位置开始读写
RandomAccessFile类原理
原理:RandomAccessFile类包含了一个记录指针,用以标识当前读写处的位置,当程序创建一个RandomAccessFile时,该对象的文件记录位于文件头(也就是0处),当读/写了n个字节后,文件记录指针将会向后移动n个字节。除此之外,RandomAccessFile可以自由的移动记录指针,即可以向前移动,也可以向后移动。RandomAccessFile包含了以下两个方法来操作文件的记录指针。
RandomAccessFile类API
package RandomAccessFileDemo;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFileAPI {
public static void main(String[] args) throws IOException {
//1.创建一个对象
RandomAccessFile raf = new RandomAccessFile("C:\\Users\\Gypsophila\\Desktop\\test2.txt","r");
//2.在创建一个对象
RandomAccessFile raf1 = new RandomAccessFile("C:\\Users\\Gypsophila\\Desktop\\test.txt","rw");
//3.读取文件内容
//a)可以移动游标(指针)
raf.seek(20);
while(true){
//b)读数据
int data = raf.read();
//获取文件指针
System.out.println("源文件指针位置:"+raf.getFilePointer());
//c)跳出条件 当data的数值为-1时,代表到了文件末尾
if(data == -1){
break;
}
//d)将数据写出
raf1.write(data);
//获取文件指针
System.out.println("目标文件指针位置:"+raf1.getFilePointer());
}
//e)获取对应文件的大小
System.out.println("raf:"+raf.length());//raf:26
System.out.println("raf1:"+raf1.length());//raf1:6
//f)将管道关闭
raf.close();
raf1.close();
//补充1.定义一个数组 每次写data个字符
/*byte[] data = new byte[1024];//1kb=1024b
raf.seek(5);
while(true){
//b)读数据
int len = raf.read(data);
//c)跳出条件 当data的数值为-1时,代表到了文件末尾
if(len == -1){
break;
}
//d)将数据写出
raf1.write(data,0,len);
}*/
}
}