Java的 io流( 九 )


转换流练习
//先把字节流包装成字符流,再把字符流包装成高级字符流public static void main(String[] args) throws IOException {////创建基本流//FileInputStream fis=new FileInputStream("D:\\我的世界\\copy.txt");////把基本流转换成字符流//InputStreamReader fsr=new InputStreamReader(fis);////再把刚才转换的字符流进行包装,变成缓冲流//BufferedReader br=new BufferedReader(fsr);//String str=br.readLine();//System.out.println(str);//上述代码可以写成以下形式BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("D:\\我的世界\\copy.txt")));String str=br.readLine();System.out.println(str);}
序列化流
属于字节流的一种,负责输出数据,与之对应的还有一个反序列化流,用来读取数据
序列化流(对象操作输出流)的解析
作用:可以把Java中的对象写到本地文件中
方法名说明
( out)
把基本流包装成高级流
方法名说明
final void( obj)
把对象序列化(写出)到文件中去
反序列化流(对象操作输入流)的解析
可以把序列化到本地的对象读取到程序中来
方法名说明
( out)
把基本流包装成高级流
方法名说明
()
把序列化到本地的对象读取到程序中来
public static void main(String[] args) throws IOException, ClassNotFoundException {ObjectInputStream ois=new ObjectInputStream(new FileInputStream("D:\\我的世界\\one.txt"));Object o = ois.readObject();System.out.println(o);ois.close();}
序列化流和反序列化流的细节练习
规定:以后创建对象写到本地文件中时,要先把对象添加到集合中,再把集合写道本地文件中,读取时可以直接读取集合
//反序列化流public static void main(String[] args) throws IOException {student s1=new student("shangyang",13);student s2=new student("shangya",23);student s3=new student("shangy",43);ArrayList>list=new ArrayList<>();list.add(s1);list.add(s2);list.add(s3);ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("one.txt"));oos.writeObject(list);oos.close();}//序列化流public static void main(String[] args) throws IOException, ClassNotFoundException {ObjectInputStream ois=new ObjectInputStream(new FileInputStream("one.txt"));ArrayList>list = (ArrayList>) ois.readObject();//这里返回值是一个对象,要转成arraylistfor (student student : list) {System.out.println(student);}}
打印流
打印流不能读只能写,所以打印流只有输出流
打印流一般是指和两个类
字节打印流方法名说明
( /File /)
关联字节输出流/文件/文件路径
( , )
指定字符编码
( out, auto )
自动刷新
( out, auto , )
指定字符编码且自动刷新
字节打印流底层没有缓冲区,开不开自动刷新都一样,所以下面两个构造方法意义不大
方法名说明
void write(int b)
常规方法,规则和之前的方法一样
void (Xxx xx)
特有方法:打印任意数据,自动刷新,自动换行
void print(Xxx xx)
特有方法:打印任意数据,不换行
void ( ,… args)
特有方法:带有占位符的打印语句,不换行
字节打印流底层没有缓冲区,开不开自动刷新都一样
public static void main(String[] args) throws IOException, ClassNotFoundException {PrintStream ps=new PrintStream(new FileOutputStream("D:\\我的世界\\a2.txt"),true,"UTF-8");//这两个跟sout的输出是一样的ps.println(97);ps.print(true);ps.println();//这个是占位符的写法//这个占位符有很多,这里就不一一细说了ps.printf("%sone%s","two","three");ps.close();}