IO流总结

1:IO

         (1)IO用于在设备间进行数据传输的操作   

         (2)分类:

                   A:流向

                            输入流     读取数据

                            输出流     写出数据

                   B:数据类型

                            字节流    

                                               字节输入流

                                               字节输出流

                            字符流

                                               字符输入流

                                               字符输出流

                   注意:

                            a:如果我们没有明确说明按照什么分,默认按照数据类型分。

                            b:除非文件用windows自带的记事本打开我们能够读懂,才采用字符流,否则建议使用字节流。

         (3)FileOutputStream写出数据

                   A:操作步骤

                            a:创建字节输出流对象

                            b:调用write()方法

                            c:释放资源

                           

                   B:代码体现:

                            FileOutputStreamfos = new FileOutputStream("fos.txt");

                           

                            fos.write("hello".getBytes());

                           

                            fos.close();

                           

                   C:要注意的问题?

                            a:创建字节输出流对象做了几件事情?

                            b:为什么要close()?

                            c:如何实现数据的换行?

                            d:如何实现数据的追加写入?

         (4)FileInputStream读取数据

                   A:操作步骤

                            a:创建字节输入流对象

                            b:调用read()方法

                            c:释放资源

                           

                   B:代码体现:

                            FileInputStreamfis = new FileInputStream("fos.txt");

                           

                            //方式1

                            intby = 0;

                            while((by=fis.read())!=-1){

                                     System.out.print((char)by);

                            }

                           

                            //方式2

                            byte[]bys = new byte[1024];

                            intlen = 0;

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

                                     System.out.print(newString(bys,0,len));

                            }

                           

                            fis.close();

         (5)案例:2种实现

                   A:复制文本文件

                   B:复制图片

                   C:复制视频

         (6)字节缓冲区流

                   A:BufferedOutputStream

                   B:BufferedInputStream

         (7)案例:4种实现

                   A:复制文本文件

                   B:复制图片

                   C:复制视频

2:字符流

         (1)字节流操作中文数据不是特别的方便,所以就出现了转换流。

            转换流的作用就是把字节流转换字符流来使用。

         (2)转换流其实是一个字符流

                   字符流 = 字节流 + 编码表

         (3)编码表

                   A:就是由字符和对应的数值组成的一张表

                   B:常见的编码表

                            ASCII

                            ISO-8859-1

                            GB2312

                            GBK

                            GB18030

                            UTF-8

                   C:字符串中的编码问题

                            编码

                                     String-- byte[]

                            解码

                                     byte[]-- String

         (4)IO流中的编码问题

                   A:OutputStreamWriter

                            OutputStreamWriter(OutputStreamos):默认编码,GBK

                            OutputStreamWriter(OutputStreamos,String charsetName):指定编码。

                   B:InputStreamReader

                            InputStreamReader(InputStreamis):默认编码,GBK

                            InputStreamReader(InputStreamis,String charsetName):指定编码

                   C:编码问题其实很简单

                            编码只要一致即可

         (5)字符流

                   Reader

                            |--InputStreamReader

                                     |--FileReader

                            |--BufferedReader

                   Writer

                            |--OutputStreamWriter

                                     |--FileWriter

                            |--BufferedWriter

         (6)复制文本文件(5种方式)

 

3:IO流小结

         IO

                   |--字节流

                            |--字节输入流

                                     InputStream

                                               intread():一次读取一个字节

                                               intread(byte[] bys):一次读取一个字节数组

                                    

                                               |--FileInputStream

                                               |--BufferedInputStream

                            |--字节输出流

                                     OutputStream

                                               voidwrite(int by):一次写一个字节

                                               voidwrite(byte[] bys,int index,int len):一次写一个字节数组的一部分

                                              

                                               |--FileOutputStream

                                               |--BufferedOutputStream

                   |--字符流

                            |--字符输入流

                                     Reader

                                               intread():一次读取一个字符

                                               intread(char[] chs):一次读取一个字符数组

                                              

                                               |--InputStreamReader

                                                        |--FileReader

                                               |--BufferedReader

                                                        StringreadLine():一次读取一个字符串

                            |--字符输出流

                                     Writer

                                               voidwrite(int ch):一次写一个字符

                                               voidwrite(char[] chs,int index,int len):一次写一个字符数组的一部分

                                              

                                               |--OutputStreamWriter

                                                        |--FileWriter

                                               |--BufferedWriter

                                                        voidnewLine():写一个换行符

                                                       

                                                        voidwrite(String line):一次写一个字符串

4:数据操作流(操作基本类型数据的流)

         (1)可以操作基本类型的数据

         (2)流对象名称        

                   DataInputStream

                   DataOutputStream

 

5:内存操作流

         (1)有些时候我们操作完毕后,未必需要产生一个文件,就可以使用内存操作流。

         (2)三种

                   A:ByteArrayInputStream,ByteArrayOutputStream

                   B:CharArrayReader,CharArrayWriter

                   C:StringReader,StringWriter

 

6:打印流

         (1)字节打印流PrintStream,字符打印流PrintWriter

         (2)特点:

                   A:只操作目的地,不操作数据源

                   B:可以操作任意类型的数据

                   C:如果启用了自动刷新,在调用println()方法的时候,能够换行并刷新

                   D:可以直接操作文件

                            问题:哪些流可以直接操作文件呢?

                            API,如果其构造方法能够同时接收FileString类型的参数,一般都是可以直接操作文件的

         (3)复制文本文件

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

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

                  

                   Stringline = null;

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

                            pw.println(line);

                   }

                  

                   pw.close();

                   br.close();

                           

7:标准输入输出流

         (1)System类下面有这样的两个字段

                   in标准输入流

                   out标准输出流

         (2)三种键盘录入方式

                   A:main方法的args接收参数

                   B:System.in通过BufferedReader进行包装

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

                   C:Scanner

                            Scannersc = new Scanner(System.in);

         (3)输出语句的原理和如何使用字符流输出数据

                   A:原理

                            System.out.println("helloworld");

                           

                            PrintStreamps = System.out;

                            ps.println("helloworld");

                   B:System.out用字符缓冲流包装一下使用

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

 

8:随机访问流(RandomAccessFile

         (1)可以按照文件指针的位置写数据和读数据。

         (2)案例:

                   A:写数据

                   B:读数据

                   C:获取和改变文件指针的位置

 

9:合并流

         (1)把多个输入流的数据写到一个输出流中。

         (2)构造方法:

                   A:SequenceInputStream(InputStreams1, InputStream s2)

                   B:SequenceInputStream(Enumeration<?extends InputStream> e)

 

10:序列化流(ObjectInputstream

         (1)可以把对象写入文本文件或者在网络中传输

         (2)如何实现序列化呢?

                   让被序列化的对象所属类实现序列化接口。

                   该接口是一个标记接口。没有功能需要实现。

         (3)注意问题:

                   把数据写到文件后,在去修改类会产生一个问题。

                   如何解决该问题呢?

                            在类文件中,给出一个固定的序列化id值。

                            而且,这样也可以解决黄色警告线问题

         (4)面试题:

                   什么时候序列化?

                   如何实现序列化?

                   什么是反序列化?

 

11:Properties

         (1)是一个集合类,Hashtable的子类

         (2)特有功能

                   A:publicObject setProperty(String key,String value)

                   B:publicString getProperty(String key)

                   C:publicSet<String> stringPropertyNames()

         (3)IO流结合的方法

                   把键值对形式的文本文件内容加载到集合中

                   publicvoid load(Reader reader)

                   publicvoid load(InputStream inStream)

 

                   把集合中的数据存储到文本文件中

                   publicvoid store(Writer writer,String comments)

                   publicvoid store(OutputStream out,String comments)

         (4)案例:

                   A:根据给定的文件判断是否有键为"lisi"的,如果有就修改其值为100

                   B:写一个程序实现控制猜数字小游戏程序不能玩超过5

 

12:NIO

         (1)JDK4出现的NIO,对以前的IO操作进行了优化,提供了效率。但是大部分我们看到的还是以前的IO

         (2)JDK7NIO的使用  

                   Path:路径

                   Paths:通过静态方法返回一个路径

                   Files:提供了常见的功能

                            复制文本文件

                            把集合中的数据写到文本文件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值