缓冲流:
/**
* BufferedReader:
* 带有缓冲区的字符输入流
* 使用这个流的时候不需要自定义byte、char数组,自带缓冲
*/
public class BufferedReaderTest01 {
public static void main(String[] args) throws Exception{
FileReader reader = new FileReader("wenjian");
/**
* 当一个流的构造方法需要一个流的时候,这个被传进来的流叫做:节点流
* 外部负责包装这个流的叫做:包装流/处理流
* 如当前程序:FileReader为节点流,BufferedReader为包装流
*/
BufferedReader br = new BufferedReader(reader);
//readline()方法返回一个字符串类型
//如 String s = br.readline();
//readline()方法读取一个文本行(一行),但不带换行符
String str = null;
while((str = br.readLine()) != null){
System.out.println(str);
}
br.close();
}
}
/**
* 转换流:InputStreamReader
* OutputStreamWriter
*/
public class BufferedReaderTest02 {
public static void main(String[] args) throws Exception{
//字节流
FileInputStream fis = new FileInputStream("wenjian");
//通过转换流转换(InputStreamReader将字节流转换为字符流)
//这里fis为节点流,reader为包装流
InputStreamReader reader = new InputStreamReader(fis);
//这个构造方法只能传一个字符流,不能传字节流,若需传入字节流,需要先将字节流转换为字符流
//这里reader为节点流,br为包装流
BufferedReader br = new BufferedReader(reader);
//以上代码合并
BufferedReader br1 = new BufferedReader(new InputStreamReader(new FileInputStream("wenjian")));
}
}
/**
* 带有缓冲的字符输出流:bufferedwriter
*/
public class BufferedWriterTest01 {
public static void main(String[] args) throws Exception {
BufferedWriter bw = new BufferedWriter(new FileWriter("abc",true));
bw.write("hahahaha");
bw.write("nihaoa");
//刷新
bw.flush();
//关闭
bw.close();
}
}
数据流:
/**
* 数据字节输入流:DataInputStream
* DataOutputStream写的文件,只能使用DataInputStream去读,且读的时候需要直到写入的顺序。
* 即读的顺序需要和写入的顺序一致,才可正常取出数据。
*/
public class DataInputStreamTest01 {
public static void main(String[] args) throws Exception{
DataInputStream dis = new DataInputStream(new FileInputStream("data"));
//读数据
short s = dis.readShort();
int i = dis.readInt();
String str = dis.readUTF();
float f = dis.readFloat();
System.out.println(s);
System.out.println(i);
System.out.println(f);
System.out.println(str);
dis.close();
}
}
/**
* 数据字节输出流:DataOutputStream
* 这个流可以将数据连同数据的类型一并写入文件。
* 注意:这个文件不是普通文本文件
*/
public class DataOutputStreamTest01 {
public static void main(String[] args) throws Exception {
DataOutputStream dos = new DataOutputStream(new FileOutputStream("data"));
//写入数据
short s = 12;
int i = 100;
String str = "haha";
float f = 3.0f;
//写
dos.writeShort(s);
dos.writeInt(i);
dos.writeUTF(str);
dos.writeFloat(f);
dos.flush();
dos.close();
}
}
输出流:
**
* 标准字节输出流(默认输出到后台):PrintStream
* 标准输出流不需要手动close()关闭
*/
public class PrintStreamTest01 {
public static void main(String[] args) throws Exception{
//联合起来写
//这里默认输出到控制台
System.out.println("hello word!");
//分开写
PrintStream ps = System.out;
ps.println("hello world");
ps.println("heihei");
ps.println("xixi");
//修改输出方向,输出到log文件当中
PrintStream ps1 = new PrintStream(new FileOutputStream("log",true));
System.setOut(ps1);
//以下不再输出到控制台,即输出搭配log文件中
System.out.println("asdf");
System.out.println("123");
System.out.println("hello world!");
}
}
/**
* PrintStream应用:如做 日志工具
*/
public class LogG {
public static void log(String msg){
//指向一个日志文件,修改输出方向
try {
System.setOut(new PrintStream(new FileOutputStream("log.txt",true)));
//当前日期时间
Date nowTime = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strTime = sdf.format(nowTime);
System.out.println(strTime + ":" + msg);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
log("调用了xxxx类的某某方法");
log("调用了PrintStram生成日志");
log("这是一个日志工具");
log("用户尝试登录,尝试失败,密码错误或用户名不正确");
}
}