二、缓冲流

    自带缓冲区的流
    缓冲流会将字节(字符)先写到一个缓冲区中,然后通过flush()或者关闭这个缓冲流来实现将缓冲流中的数据回显。

    java.io.BufferedReader

    java.io.BufferedWriter

    java.io.BufferedInputStream

    java.io.BufferedOutputStream

    四种缓冲流使用方法差不多

    缓冲流可以用方法直接读取,不用建立字节(字符)数组,底层效率不高,但代码编写效率高。

    1、java.io.BufferedReader
    转换流 可以将字节流转换成字符流或者反之 InputStreamReader / OutputStreamWriter

    1. package com.jy.io2;
    2. import java.io.*;
    3. /**
    4. * 缓冲流 自带缓冲区,可以一次性读取多个字节
    5. *
    6. *包装流和节点流 new 流1(new 流2(new 流3()))外面的是包装流,里面的是节点流,流2相对流3是包装流,相对流1是节点流,
    7. * 流1相对流2是包装流
    8. *
    9. * 在关闭流对象时,只需要关闭最外层的包装流即可
    10. */
    11. public class IOTest03 {
    12. public static void main(String[] args) throws IOException {
    13. BufferedReader bufferedReader =null;
    14. FileInputStream fileInputStream = null;
    15. InputStreamReader inputStreamReader = null;
    16. //创建文件输入流
    17. try {
    18. //FileReader fileReader = new FileReader("E:\\Temp\\io05.java");
    19. fileInputStream = new FileInputStream("E:\\Temp\\io04.java");
    20. //通过转换流将字节流转换成字符流,本身就是字符流就不用转换
    21. inputStreamReader = new InputStreamReader(fileInputStream);
    22. //BufferedReader 包装流
    23. //fileReader 属于节点流
    24. bufferedReader = new BufferedReader(inputStreamReader);
    25. // new BufferedReader(new InputStreamReader(new FileInputStream("E:\\Temp\\io04.java")))
    26. //read()方法是都有的,这里介绍特有的方法
    27. //读取一行readLine() 特有方法 这个方法如果读取完了,会返回null
    28. String s1 = null;
    29. while((s1 = bufferedReader.readLine()) != null){
    30. System.out.println(s1);
    31. }
    32. } catch (Exception e) {
    33. e.printStackTrace();
    34. }finally {
    35. bufferedReader.close();
    36. }
    37. }
    38. }

    2、java.io.BufferedWriter

    1. public class IOTest04 {
    2. public static void main(String[] args) throws IOException {
    3. //创建缓冲流对象
    4. BufferedWriter bufferedWriter =
    5. new BufferedWriter(new OutputStreamWriter(new FileOutputStream("io01.txt")));
    6. //完成数据的写入
    7. bufferedWriter.write("你好,柿子");
    8. //关闭流
    9. bufferedWriter.close();
    10. }
    11. }

    三、数据流

    在写文件时(DataOutputStream),是以加密的形式写入,普通记事本打不开,写入文件时,会连同数据的数据类型一起写入。
    在读文件时,只能采用DataInputStream去读取

    java.io.DataInputStream

    java.io.DataOutputStream

    1、java.io.DataInputStream

    1. public class IOTest05 {
    2. public static void main(String[] args) throws IOException {
    3. //创建数据流对象,DataOutputStream参数为字节流输出对象,即包装流与节点流
    4. DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("io02.txt"));
    5. //写入数据时一定要连同数据的数据类型一起写入
    6. int i = 10;
    7. char c = 'h';
    8. boolean flag = true;
    9. dataOutputStream.writeInt(i);
    10. dataOutputStream.writeChar(c);
    11. dataOutputStream.writeBoolean(flag);
    12. dataOutputStream.flush();
    13. dataOutputStream.close();
    14. }
    15. }

    2、java.io.DataOutputStream
    读取的顺序要和写入的顺序一样

    1. public class IOTest06 {
    2. public static void main(String[] args) throws Exception {
    3. DataInputStream dataInputStream = new DataInputStream(new FileInputStream("io02.txt"));
    4. int i = dataInputStream.readInt();
    5. char c = dataInputStream.readChar();
    6. boolean b = dataInputStream.readBoolean();
    7. System.out.println(i);
    8. System.out.println(c);
    9. System.out.println(b);
    10. dataInputStream.close();
    11. }
    12. }

    四、标准输出流

    PrintWriter

    PrintStream

    字节流和字符流对应的标准输出流使用方法相同。
    作用:控制台打印、日志记录

    控制台打印实际上采用的就是标准输出流

    1. System.out.println("你好,柿子");
    2. PrintStream out = System.out;
    3. out.println("你好,柿子");

    采用标准输出流完成日志记录的话,第一步,改变标准输出流的输出方向,标准输出流会默认打印在控制台上,默认输出路径是控制台。

    PrintStream

    1. public class IOTest07 {
    2. public static void main(String[] args) throws Exception {
    3. PrintStream printStream = new PrintStream(new FileOutputStream("io03.txt"));
    4. //更改输出方向 更改为硬盘上的文件
    5. System.setOut(printStream);
    6. //此时再打印就被保存在io03.txt文件里,而不是控制台输出
    7. System.out.println("你好,柿子");
    8. }
    9. }

    创建日志工具类

    1. /**
    2. * 根据标准输出流创建日志工具类
    3. */
    4. public class LoggerUtil {
    5. //私有化构造方法
    6. private LoggerUtil(){
    7. }
    8. //记录日志的方法
    9. public static void Logger(String message){
    10. //创建标注输出流对象
    11. try {
    12. //创建标注输出流对象
    13. PrintStream printStream = new PrintStream(new FileOutputStream("logger",true));
    14. //设置输出方向
    15. System.setOut(printStream);
    16. Date date = new Date();
    17. //日期格式化
    18. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    19. //将日期转换为字符串
    20. String dateTime = simpleDateFormat.format(date);
    21. System.out.println(dateTime+" "+message);
    22. } catch (FileNotFoundException e) {
    23. e.printStackTrace();
    24. }
    25. }
    26. }

    日期常用类

    1. //获取当前时间
    2. Date date = new Date();
    3. //日期格式化
    4. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    5. //将日期转换为字符串
    6. String dateTime = simpleDateFormat.format(date);
    7. System.out.println(dateTime);