JAVA基础——IO流知识点完整总结版

来源:互联网 发布:如何利用网络招聘 编辑:程序博客网 时间:2024/04/26 07:09

1:IO流

      (1)分类

           字节流:

                 输入流:

                      InputStream

                            intread()

                            intread(byte[] bys)

                      FileInputStream

                      BufferedInputStream

                 输出流:

                      OutputStream

                            write(intby)

                            write(byte[]bys,int index,int len)

                      FileOutputStream

                      BufferedOutputStream

 

           字符流:

                 输入流:

                      Reader

                            intread()

                            intread(char[] chs)

                      FileReader

                      BufferedReader

                            StringreadLine()

                 输出流:

                      Writer

                            write(intch)

                            write(char[]chs,int index,int len)

                      FileWriter

                      BufferedWriter

                            write(Stringline)

                            voidnewLine()

      (2)到底使用谁?

          如果能用记事本打开,不出现乱码,就优先使用字符流;否则用字节流。

          确定上面的情况以后,一般都是用高效流(BufferedXxxx)

 

          

      (3)复制文本文件:

           9种方式:

                 字节流:

                      4种

                            基本流每次操作一个字节

                            基本流每次操作一个字节数组

                            高效流每次操作一个字节

                            高效流每次操作一个字节数组(★)

                 字符流:

                      5种

                            基本流每次操作一个字符

                            基本流每次操作一个字符数组

                            高效流每次操作一个字符

                            高效流每次操作一个字符数组(★)

                            高效流每次操作一行文本(★)

 

           思路:

                 1.创建缓冲字符输入流对象(建立于文件系统中文件的对应关系)

                 2.创建缓冲字符输出流对象(建立于文件系统中文件的对应关系)

                 3.使用输入流对象的read方法,读出源文件中内容(显示/其他操作)

                 4.使用输出流对象的write方法,写入数据到目的地文件(需要刷新)

                 5.关闭流,释放资源

 

           怎么选择使用?

                

 

           代码体现:

                 数据源:a.txt

                 目的地:b.txt

 

           思路:

                 1.创建缓冲字符输入流对象(建立于文件系统中文件的对应关系)

                 2.创建缓冲字符输出流对象(建立于文件系统中文件的对应关系)

                 3.使用输入流对象的read方法,读出源文件中内容(显示/其他操作)

                 4.使用输出流对象的write方法,写入数据到目的地文件(需要刷新)

                 5.关闭流,释放资源

           代码体现:

                 //创建对象

                 BufferedReaderbr = null;

                 BufferedWriterbw = null;

                 try{

                      //实例化对象

                      br= new BufferedReader(new FileReader("a.txt"));

                      bw= new BufferedWriter(new FileWriter("b.txt"));

 

                      //读取内容

                      Stringlen = null;

                      while((len= br.readLine())!= null){

                            //写入数据

                            bw.write(len);

                            bw.newLine();

                            bw.flush();

                      }

                 }catch(Exceptione){

                      e.printStackTrace();

                 }finally{

                      if(br!= null){

                            try{

                                  br.close();

                            }catch(Exceptione){

                                  e.printStackTrace();

                            }

                      }

                      if(bw!=  null){

                            try{

                                  bw.close();

                            }catch(Exceptione){

                                  e.printStackTrace();

                            }

                      }

 

                 }

 

                

 

      (4)复制二进制流数据:(图片,视频,音频等)

           字节流:

                      4种

                      基本流每次操作一个字节

                      基本流每次操作一个字节数组

                      高效流每次操作一个字节

                      高效流每次操作一个字节数组(★)

          

          

 

           怎么选择使用?

                 选用高效流每次操作一个字节数组

 

           代码体现:

                 数据源:c:\\a.jpg

                 目的地:d:\\b.jpg

 

           思路:

                 1.创建缓冲字节输入流对象(建立于文件系统中文件的对应关系)

                 2.创建缓冲字节输出流对象(建立于文件系统中文件的对应关系)

                 3.使用输入流对象的read方法,读出源文件中内容(显示/其他操作)

                 4.使用输出流对象的write方法,写入数据到目的地文件(需要刷新)

                 5.关闭流,释放资源

          

           //创建对象

           BufferedInputStreambis = null;

           BufferedOutputStreambos = null;

           try{

                 //实例化对象

                 bis= new BufferedInputStream(new FileInputStream("c:\\a.jpg"));

                 bos= new BufferedOutputStream(new FileOutputStream("d:\\b.jpg"));

                

                 //读取

                 byte[]bys = new byte[1024];

                 intlen = 0;

                 while((len= bis.read(bys))!= -1){

                      //写入数据

                      bos.write(bys,0,len);

                 }    

           }catch(IOExceptione){

                 e.printStackTrace();              

           }fianlly{

                 if(bis!= null){

                      try{

                            bis.close();

                      }catch(Exceptione){

                            e.printStackTrace();

                      }

                 }

                 if(bos!=  null){

                      try{

                            bos.close();

                      }catch(Exceptione){

                            e.printStackTrace();

                      }

                 }

          

            }

2:转换流(理解)

      (1)如果有字节流对象,为了使用字符流的功能,就必须使用转换流进行操作。

      (2)案例:

           键盘录入数据

 

           BufferedReaderbr = new BufferedReader(new InputStreamReader(System.in));

           BufferddWriterbw = new BufferedWriter(new FileWriter("a.txt"));

 

           Stringline = null

           while((line=br.readLine())!=null)

           {

                 if("over".equals(line))

                 {

                      break;

                 }

 

                 bw.write(line);

                 bw.newLine();

                 bw.flush();

           }

 

           bw.close();

           br.close();

 

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

 

           BufferedReaderbr = new BufferedReader(new FileReader("a.txt"));

           BufferddWriterbw = new BufferedWriter(new OutputStreamWriter(System.out));

 

           Stringline = null

           while((line=br.readLine())!=null)

           {

                 bw.write(line);

                 bw.newLine();

                 bw.flush();

           }

 

           bw.close();

           br.close();

 

3:打印流(掌握)

      (1)打印流是写数据的。

      (2)特点:

           A:可以写任意数据类型的数据

           B:如果启动了自动刷新,能自动刷新,还会换行。println()

           C:可以直接往文件写数据

                注意:哪些流对象可以直接读写文件?

                看构造方法,如果同时有StringFile的构造参数,那么该流对象就可以读写文件。

      (3)用打印流改进复制文本文件的操作

           数据源:

                 c:\\a.txt

           目的地:

                 d:\\b.txt

 

           BufferedReaderbr = new BufferedReader(new FileReader("c:\\a.txt"));

           PrintWriterpw = new PrintWriter(new FileWriter("d:\\b.txt"),true);

 

           Stringline = null;

           while((line=br.readLine())!=null)

           {

                 pw.println(line);

           }

 

           pw.close();

           br.close();

 

4:序列化流(理解)

      (1)序列化:把对象按照流一样的方式在网络中传输,或者存储到文本文件

         反序列化:把流数据还原成对象

      (2)如何实现序列化?

           A:被序列化的对象所属的类必须实现序列化接口

           B:用序列化流对象进行操作

      (3)序列化(对象)流对象

           ObjectInputStream:

                 ObjectreadObject()

           ObjectOutputStream:

                 voidwriteObject(Object obj)

      (4)掌握:

           A:看到类实现了序列化接口,就知道该类可以被序列化流对象操作

           B:看到类实现了序列化接口,知道点击鼠标就可以解决黄色警告问题

5:字符编码(理解)

      (1)编码表:

           就是字符和对应的数据组成的一张表。

      (2)常见的编码表:

           ASCII

           ISO-8859-1

           GBK

           GB2310

           GB18030

           UTF-8

           BIG5    --    自己问问度娘

      (3)转换流中的编码问题

           A:字符流 =字节流+编码表

           B:通过转换流写入数据,指定为UTF-8编码,并通过UTF-8编码读取。


6:Properties(理解)

      (1)是Map体系一个集合类。

      (2)特点:

           A:可以把集合中的数据保存到文本文件,也可以把文本文件的数据加载到集合中。

           B:该集合的键和值都是String类型

      (3)特殊功能:

           A:setProperty(String key,Stringvalue)

           B:getProperty(String key)

            getProperty(String key,String defaultValue)

           C:Set<String>stringPropertyNames()

      (4)IO流结合的方法:

           A:list通过打印流把数据保存到文件中

           B:load通过任意流把文本中的数据加载到集合中

           C:store通过任意流把数据保存到文件中

      (5)案例:

           查找文件中是否有键为lisi的,如果有,则修改其值为50

 

0 0