带有缓冲区的字符流
BufferedReader
带有缓冲区的字符输入流。
使用这个流的时候不需要自定义char数组。或者说不需要自定义byte数組。自带缓冲。
public class BufferedReaderTest01 {
public static void main(String[] args) throws Exception {
FileReader reader=new FileReader("copy02.java");
//当一个流的构造方法中需要一个流的时候 ,这个被传进来的流叫做:节点流。
//外部负责包装的这个流,叫做:包装流,还有一个名字叫做:处理流。
//像当前这个程序来说: FileReader就是一个节点流。BufferedReader就是包装流/处理流。
BufferedReader br=new BufferedReader(reader);
//读一行
/*String firstLine=br.readLine();
System.out.println(firstLine);
String secondLine=br.readLine();
System.out.println(secondLine);
*/
// br.readLine()方法读取一个文本行,但不带换行符。
String s =null;
while((s=br.readLine())!=null){
System.out.println(s);
}
//关闭流
//对于包装流来说,只需要关闭最外层流就行,里面的节点流会自动关闭。
br.close();
}
}
public class BufferedReaderTest02 {
public static void main(String[] args) throws Exception {
/*//字节流
FileInputStream in = new FileInputStream( "copy02.java");
//这个构造方法只能传一个字符流。不能传字节流。下一行代码报错,因为传入的是字节流对象
//BufferedReader br = new BufferedReader(in);
//通过转换流转换( InputStreamReader将字节流转换成字符流。 )
// in是节点流。reader是包装流。
InputStreamReader reader=new InputStreamReader(in);
//reader是节点流,br是包装流
BufferedReader br = new BufferedReader(reader);
*/
//合并
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("copy02.java")));
String line =null;
while((line=br.readLine())!=null){
System.out.println(line);
}
//关闭最外层
br.close();
}
}
BufferedWriter
public class BufferedWriterTest {
public static void main(String[] args) throws Exception {
//带有缓冲区的字符输出流
//BufferedWriter out=new BufferedWriter( new FileWriter("copy"));
BufferedWriter out=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("copy",true)));
//开始写
out.write("hello world!");//把数据以及数据类型一并写入到文件
out.write("\n");
out.write("hello kitty!");
//刷新
out.flush();
//关闭外层
out.close();
}
}
数据流
DataInputStream:数据字节输入流。
DataOutputStream写的文件,只能使用DataInputStream去读。并且读的时候需要提前知道写入的顺序。
读的顺序需要和写的顺序一致。 才可以正常取出数据。
public class DataInputStreamTest01 {
public static void main(String[] args) throws Exception {
DataInputStream dis = new DataInputStream(new FileInputStream("data"));
//开始读
byte b = dis.readByte();
short s = dis.readShort();
int i = dis.readInt();
long l = dis.readLong();
float f = dis.readFloat();
double d = dis.readDouble();
boolean sex = dis.readBoolean();
char c = dis.readChar();
System.out.println(b);
System.out.println(s);
System.out.println(i + 1000);
System.out.println(l);
System.out.println(f);
System.out.println(d);
System.out.println(sex);
System.out.println(c);
}
}
java.io.DataOutputStream :数据专属的流。
这个流可以将数据连同数据的类型一并写入文件。
注意:这个文件不是普通文本文档。 (这个文件使用记事本打不开。)
public class DataOutputStreamTest {
public static void main(String[] args) throws Exception{
//创建数据专属的字节输出流
DataOutputStream dos = new DataOutputStream(new FileOutputStream("data"));
//写数据
byte b =100;
short s =200;
int i =300;
long l =400L;
float f =3.0F;
double d =3.14;
boolean sex =false;
char c ='a';
//写
dos.writeByte(b);
dos.writeShort(s);
dos.writeInt(i);
dos.writeLong(1);
dos.writeFloat(f);
dos.writeDouble(d);
dos.writeBoolean(sex);
dos.writeChar(c);
//刷新
dos.flush();
//关闭最外层
dos.close();
}
}
标准输出流
java.io.PrintStream:标准的字节输出流。默认输出到控制台
public class PrintStreamTest {
public static void main(String[] args) throws Exception {
//联合起来写
System.out.println("he11o world!");
//分开写
PrintStream ps = System.out ;
ps.println("he1lo zhangson");
ps.println("hel1o lisi");
ps.println("he11o wangwu");
//标准输出流不需要手动close()关闭。
//可以改变标准输出流的输出方向吗?可以
/*
//这些是之前System类使用过的方法和属性。
System.gc(); .
System.currentTimeMillis();
PrintStream ps2 = 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 kitty");
System.out.println("hello zhangsan" );
//System.setOut(new PrintStream(new FileOutputStream("log")));
}