1、带有缓冲区的包装流
/* * BufferedReader: * 带有缓冲区的字符输入流 * 使用这个流的时候不需要自定义char数组,或者说不需要自定义byte数组,自带缓冲 * * * */ FileReader reader = null; try { reader = new FileReader("world.txt"); //当一个流的构造方法中需要一个流的时候,这个被传进来的流叫做:节点流 //外部负责包装的这个流,叫做包装流,还有一个名字叫做:处理流 //像当前这个程序来说:FileReader就是一个节点流,BufferedRead就是包装流(处理流) BufferedReader br = new BufferedReader(reader); //读一行 String firstLine = br.readLine(); System.out.println(firstLine); //读一行 String secondLine = br.readLine(); System.out.println(secondLine); //readLine读取一个文本行,但是不带换行符 String s = null; while((s = br.readLine()) != null){ System.out.println(s); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ // 指需要关闭包装流,不需要关闭节点流 if(reader != null){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } }
2、包装流和节点流
/* * 转换流:InputStreamReader * */ //字节流 FileInputStream in = new FileInputStream("world.txt"); //通过转换流转换(InputStreamReader 将字节流转换成字符流 InputStreamReader reader = new InputStreamReader(in); //这个构造方法只能传一个字符流,不能传字节流 //reader是节点流,br是包装流 BufferedReader br = new BufferedReader(reader); //合并 BufferedReader ttbr = new BufferedReader(new InputStreamReader(new FileInputStream("world.txt")));
/* * BufferedWriter:带有缓冲的字符输出流 * */ // BufferedWriter out = new BufferedWriter(new FileWriter("copy001")); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("copy001",true))); out.write("hello world"); out.write("\n"); out.write("hello kitty"); //刷新 out.flush(); //关闭最外层 out.close();
3、数据流
/* * java.io.DataOutputStream :数据专属流 * 这个流可以将数据连通数据的类型一并写入文件 * 注意:这个文件不是普通文本文档(这个文件用记事本不能打开) * * * */ //创建数据专属的字节输出流 DataOutputStream dos = new DataOutputStream(new FileOutputStream("data")); //把数据以及数据的类型一并写入文件 byte a = 100; short b = 200; int c = 300; float d = (float)400.5; double e = 500.1; char f = '我'; //写 dos.writeByte(a); dos.writeShort(b); dos.writeInt(c); dos.writeFloat(d); dos.writeDouble(e); dos.writeChar(f); //刷新 dos.flush(); //关闭最外层 dos.close(); /* * DataInputStream :数据字节输入流 * DataOutputStream写的文件,只能使用DataInputStream去读,并且读的时候需要提前知道写入的顺序 * 读的顺序和写的顺序一样,才能正常取出数据 * * */ DataInputStream dis = new DataInputStream(new FileInputStream("data")); byte a1 = dis.readByte(); short a2 = dis.readShort(); int a3 = dis.readInt(); float a4 = dis.readFloat(); double a5 = dis.readDouble(); char a6 = dis.readChar(); System.out.println(a1); System.out.println(a2); System.out.println(a3); System.out.println(a4); System.out.println(a5); System.out.println(a6);
4、标准输出流
/* * java.io.PrintStream 标准的字节输出流,默认输出到控制台 * * * */ //联合起来写 System.out.println("hello world"); //分开写 PrintStream ps = System.out; ps.println("hello zhangshan"); ps.println("hello lisi"); ps.println("hello wangwu"); //标准输出流不需要手动close()关闭 //可以改变标准输出流的输出方向吗? 可以 /* System.gc(); System.currentTimeMillis(); PrintStream ps1 = System.out; System.exit(0); System.arraycopy(...);*/ // 标准输出流不再指向控制台,指向“log"文件 PrintStream printStream = new PrintStream(new FileOutputStream("log")); // 修改输出方向,将输出方向修改到"log"文件 System.setOut(printStream); //再输出 System.out.println("hello world"); System.out.println("hello kiite"); System.out.println("hello zhangshan");