黑马程序员-IO流学习汇总

 ---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

1:IO流
 (1)分类
  字节流:
   输入流:
    InputStream
     int read()
     int read(byte[] bys)
    FileInputStream
    BufferedInputStream
   输出流:
    OutputStream
     write(int by)
     write(byte[] bys,int index,int len)
    FileOutputStream
    BufferedOutputStream

  字符流:
   输入流:
    Reader
     int read()
     int read(char[] chs)
    FileReader
    BufferedReader
     String readLine()
   输出流:
    Writer
     write(int ch)
     write(char[] chs,int index,int len)
    FileWriter
    BufferedWriter
     write(String line)
     void newLine()
 (2)到底使用谁?
  用记事本打开能读懂的,就用字符流。
  否则,用字节流。
  如果你根本就不知道,用字节流。
 (3)复制文本文件:
  9种方式:
   字节流:
    4种
     基本流一次读写一个字节
     基本流一次读写一个字节数组
     高效流一次读写一个字节
     高效流一次读写一个字节数组
   字符流:
    5种
     基本流一次读写一个字符
     基本流一次读写一个字符数组
     高效流一次读写一个字符
     高效流一次读写一个字符数组
     高效流一次读写一个字符串

  一般来说,明明知道是文本文件,那么,肯定不用字节流。
  那么,如果是使用字符流,有5种方式,选择哪一种呢?
  一般都选择高效流读写一个字符串的方式。


  代码体现:
   数据源:c:\\a.txt
   目的地:d:\\b.txt

   BufferedReader br = new BufferedReader(new FileReader("c:\\a.txt"));
   BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\b.txt"));

   String line = null;
   while((line=br.readLine())!=null)
   {
    bw.write(line);
    bw.newLine();
    bw.flush();
   }

   bw.close();
   br.close();

 (4)复制二进制流数据:(图片,视频,音频等)
  字节流:
    4种
     基本流一次读写一个字节
     基本流一次读写一个字节数组
     高效流一次读写一个字节
     高效流一次读写一个字节数组

  一般来说,我们选择使用高效流一次读写一个字节数组

  代码体现:
   数据源:c:\\a.jpg
   目的地:d:\\b.jpg

   BufferedInputStream bis = new BufferedInputStream(new FileInputStream("c:\\a.jpg"));
   BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("d:\\b.jpg"));

   byte[] bys = new byte[1025];
   int len = 0;
   while((len=bis.read(bys))!=-1)
   {
    bos.write(bys,0,len);
   }

   bos.close();
   bis.close();

2 转换流
 (1)如果有字节流对象,为了使用字符流的功能,就必须使用转换流进行操作。
 (2)案例:
  键盘录入数据

  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  BufferddWriter bw = new BufferedWriter(new FileWriter("a.txt"));

  String line = null
  while((line=br.readLine())!=null)
  {
   if("over".equals(line))
   {
    break;
   }

   bw.write(line);
   bw.newLine();
   bw.flush();
  }

  bw.close();
  br.close();

  把文本文件的数据通过流对象在控制台显示

  BufferedReader br = new BufferedReader(new FileReader("a.txt"));
  BufferddWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

  String line = null
  while((line=br.readLine())!=null)
  {
   bw.write(line);
   bw.newLine();
   bw.flush();
  }

  bw.close();
  br.close();

3:打印流
 (1)打印流是写数据的。
 (2)特点:
  A:可以写任意数据类型的数据
  B:如果启动了自动刷新,能自动刷新,还会换行。println()
  C:可以直接往文件写数据
   注意:哪些流对象可以直接读写文件?
   看构造方法,如果同时有String和File的构造参数,那么该流对象就可以读写文件。
 (3)用打印流改进复制文本文件的操作
  数据源:
   c:\\a.txt
  目的地:
   d:\\b.txt

  BufferedReader br = new BufferedReader(new FileReader("c:\\a.txt"));
  PrintWriter pw = new PrintWriter(new FileWriter("d:\\b.txt"),true);

  String line = null;
  while((line=br.readLine())!=null)
  {
   pw.println(line);
  }

  pw.close();
  br.close();

4:序列化流
 (1)序列化:把对象按照流一样的方式在网络中传输,或者存储到文本文件
    反序列化:把流数据还原成对象
 (2)如何实现序列化?
  A:被序列化的对象所属的类必须实现序列化接口
  B:用序列化流对象进行操作
 (3)序列化(对象)流对象
  ObjectInputStream:
   Object readObject()
  ObjectOutputStream:
   void writeObject(Object obj)
 (4)掌握:
  A:看到类实现了序列化接口,就知道该类可以被序列化流对象操作
  B:看到类实现了序列化接口,知道点击鼠标就可以解决黄色警告问题

5:Properties
 (1)是Map体系一个集合类。
 (2)特点:
  A:可以把集合中的数据保存到文本文件,也可以把文本文件的数据加载到集合中。
  B:该集合的键和值都是String类型
 (3)特殊功能:
  A:setProperty(String key,String value)
  B:getProperty(String key)
    getProperty(String key,String defaultValue)
  C:Set<String> stringPropertyNames()
 (4)和IO流结合的方法:
  A:list 通过打印流把数据保存到文件中
  B:load 通过任意流把文本中的数据加载到集合中
  C:store 通过任意流把数据保存到文件中
 (5)案例:
  查找文件中是否有键为lisi的,如果有,则修改其值为50

6:字符编码
 (1)编码表:
  就是字符和对应的数据组成的一张表。
 (2)常见的编码表:
  ASCII
  ISO-8859-1
  GBK
  GB2310
  GB18030
  UTF-8
  BIG5
 (3)转换流中的编码问题
  A:字符流 = 字节流+编码表
  B:通过转换流写入数据,指定为UTF-8编码,并通过UTF-8编码读取。

 ---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值