0821 Java io流操作

一、io流定义

数据流向某个对象的数据序列, 并且到达这个对象的过程。

0821 Java io流操作

二、io流分类

输入流:数据源数据流向计算机内存的过程
输出流:把数据从程序流向目标数据源的过程
字节流:以字节为数据单位来处理的流8位
字符流:以字符为数据单位来处理的流2字节16位

三、流的基类(父类):

输入流:以InputStream(字节)和Reader(字符)为基类
输出流:以OutputStream(字节)和Writer(字符)为基类

四、字节输入流InputStream

0821 Java io流操作

available()返回文件的大小

skip()跳过n个字节后开始读取

mark()设置断点,给当前位置做一个标记,下一次从标记位置开始读取

reset()将当前复位的位置设置成上次调用mark标记的位置

0821 Java io流操作

//磁盘路径: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

0821 Java io流操作

0821 Java io流操作

                        //把目标源和程序建立连接
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");