一、缓冲流
自带缓冲区的流,也可称为包装流
缓冲流会将字节(字符)先写到一个缓冲区中,然后通过flush()或者关闭这个缓冲流来实现将缓冲流中的数据回显。
java.io.BufferedReader
java.io.BufferedWriter
java.io.BufferedInputStream
java.io.BufferedOutputStream
四种缓冲流使用方法差不多
缓冲流可以用方法直接读取,不用建立字节(字符)数组,底层效率不高,但代码编写效率高。
1、java.io.BufferedReader
public class IOTest03 {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader =null;
//创建文件输入流
try {
FileReader fileReader = new FileReader("E:\\Temp\\io05.java");
//BufferedReader 包装流
//fileReader 属于节点流
bufferedReader = new BufferedReader(fileReader);
//读取一行
String s1 = bufferedReader.readLine();
} catch (Exception e) {
e.printStackTrace();
}finally {
bufferedReader.close();
}
}
}
2、java.io.BufferedWriter
public class IOTest04 {
public static void main(String[] args) throws IOException {
//创建缓冲流对象
BufferedWriter bufferedWriter =
new BufferedWriter(new OutputStreamWriter(new FileOutputStream("io01.txt")));
//完成数据的写入
bufferedWriter.write("你好,柿子");
//关闭流
bufferedWriter.close();
}
}
二、数据流
在写文件时(DataOutputStream),是以加密的形式写入,普通记事本打不开,写入文件时,会连同数据的数据类型一起写入。
在读文件时,只能采用DataInputStream去读取
java.io.DataInputStream
java.io.DataOutputStream
1、java.io.DataInputStream
public class IOTest05 {
public static void main(String[] args) throws IOException {
//创建数据流对象
DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("io02.txt"));
//写入数据时一定要连同数据的数据类型一起写入
int i = 10;
char c = 'h';
dataOutputStream.writeInt(i);
dataOutputStream.writeChar(c);
dataOutputStream.flush();
dataOutputStream.close();
}
}
2、java.io.DataOutputStream
public class IOTest06 {
public static void main(String[] args) throws Exception {
DataInputStream dataInputStream = new DataInputStream(new FileInputStream("io02.txt"));
int i = dataInputStream.readInt();
char c = dataInputStream.readChar();
System.out.println(i);
System.out.println(c);
dataInputStream.close();
}
}
三、标准输出流
PrintWriter
PrintStream
字节流和字符流对应的标准输出流使用方法相同。
作用:控制台打印、日志记录
控制台打印实际上采用的就是标准输出流
System.out.println("你好,柿子");
PrintStream out = System.out;
out.println("你好,柿子");
采用标准输出流完成日志记录的话,第一步,改变标准输出流的输出方向,标准输出流会默认打印在控制台上,默认输出路径是控制台。
PrintStream
public class IOTest07 {
public static void main(String[] args) throws Exception {
PrintStream printStream = new PrintStream(new FileOutputStream("io03.txt"));
//更改输出方向 更改为硬盘上的文件
System.setOut(printStream);
System.out.println("你好,柿子");
}
}
创建日志工具类
/**
* 根据标准输出流创建日志工具类
*/
public class LoggerUtil {
//私有化构造方法
private LoggerUtil(){
}
//记录日志的方法
public static void Logger(String message){
//创建标注输出流对象
try {
//创建标注输出流对象
PrintStream printStream = new PrintStream(new FileOutputStream("logger",true));
//设置输出方向
System.setOut(printStream);
Date date = new Date();
//日期格式化
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//将日期转换为字符串
String dateTime = simpleDateFormat.format(date);
System.out.println(dateTime+" "+message);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}