一、io流定义
数据流向某个对象的数据序列, 并且到达这个对象的过程。
二、io流分类
输入流:数据源数据流向计算机内存的过程
输出流:把数据从程序流向目标数据源的过程
字节流:以字节为数据单位来处理的流8位
字符流:以字符为数据单位来处理的流2字节16位
三、流的基类(父类):
输入流:以InputStream(字节)和Reader(字符)为基类
输出流:以OutputStream(字节)和Writer(字符)为基类
四、字节输入流InputStream
available()返回文件的大小
skip()跳过n个字节后开始读取
mark()设置断点,给当前位置做一个标记,下一次从标记位置开始读取
reset()将当前复位的位置设置成上次调用mark标记的位置
//磁盘路径:1、\\ 2、/
//从文件地址中读取内容到程序中
InputStream is=new FileInputStream("C:/java/iodemo/ch01.txt");
//开始读取信息,先定义一个字节数组存放数据
byte[] b=new byte[is.available()];
//循环读取每个数据
while(is.read()!=-1);
//把字节数组转字符串
System.out.println(new String(b));
//关闭流
is.close();
五、带缓冲区的字节输入流BufferedInputStream
//读取文件内容
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("C:/java/iodemo/ch02.txt"));
byte[] b=new byte[bis.available()];
bis.read(b);
System.out.println(new String(b));
bis.close();
六、序列流(集合流)
把n个流合并在一起读取
//创建多个流文件
FileInputStream fis1=new FileInputStream("C:/java/iodemo/a.txt");
FileInputStream fis2=new FileInputStream("C:/java/iodemo/b.txt");
FileInputStream fis3=new FileInputStream("C:/java/iodemo/c.txt");
//把3个流添加到集合中
Vector<FileInputStream> vector=new Vector<>();
vector.add(fis1);
vector.add(fis2);
vector.add(fis3);
//合并到一个序列流中
SequenceInputStream sis=new SequenceInputStream(vector.elements());
byte[] b=new byte[fis1.available()+fis2.available()+fis3.available()];
//off数组里存放数据的起始位置
int off=0;
for(int i=0;i<vector.size();i++){
off+=(sis.read(b,off,vector.get(i).available()));
}
System.out.println(new String(b));
sis.close();
七、字节输出流OutputStream
//把目标源和程序建立连接
FileOutputStream fos=new FileOutputStream("C:/java/iodemo/out.txt");
//把字符串转为字节数组
String str="啊啊啊啊";
fos.write(str.getBytes());
//flush()把数据完全冲刷到目标源中
fos.flush();
fos.close();
System.out.println("文件写入成功!");
八、带缓冲区的字节输出流BufferedOutputStream
//直接传文件名,默认是覆盖原有内容
//文件名,true在原有内容后添加新内容
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("C:/java/iodemo/out.txt",true));
String str="啊啊啊啊";
bos.write(str.getBytes());
//flush()把数据完全冲刷到目标源中
bos.flush();
bos.close();
System.out.println("文件写入成功!");
九、数据的写入DataOutputStream和读取DataInputStream
//写入
DataOutputStream dos=new DataOutputStream(new FileOutputStream("C:/java/iodemo/out10.txt"));
dos.writeBoolean(true);
dos.writeInt(110);
dos.writeUTF("今晚打老虎");
dos.flush();
dos.close();
System.out.println("写入成功");
//读取
DataInputStream dis = new DataInputStream(new FileInputStream("C:/java/iodemo/out10.txt"));
System.out.println(dis.readBoolean());
System.out.println(dis.readInt());
System.out.println(dis.readUTF());
dis.close();
十、打印输出流PrintStream
PrintStream ps=new PrintStream(System.out);
ps.print("asfdshj");