File类:(不属于流,它只是进行对文件的操作,并不没有进行对数据的操作)
File类:它是文件和目录路径名的抽象表示;文件和目录是可以通过File封装对象的;对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的。
File类的作用:一个File对象而可以代表一个文件或目录;File可以实现获取文件和目录属性等功能;可以实现对文件和目录的创建,删除等功能。
路径:
相对路径:必须使用取自其他路径名的信息解释。例如:myFile\\java.txt,它其实是在和同一IDEA的模块的同一位置。
绝对路径:完整的路径名,不需要任何其他信息就可以定位它所表示的文件。例如:E:\\itcast\\java.txt。
IO:输入/输出(Input/Output),从硬盘到内存的过程叫输入(读数据),从内存到硬盘的过程叫输出(写数据)
什么是流:是一种抽象概念,是对数据传输的总称。也就是说数据再设备间的传输称为流,流的本质是数据传输。
IO流的作用:IO流就是用来处理设备间数据传输问题的(常见应用:文件复制,文件上传,文件下载)
IO流的分类:
按照数据的流向:
输入流:读数据。
输出流:写数据。
按照数据类型来分:
字节流:字节输入流;字节输出流。
字符流:字符输入流;字符输出流。
使用情况:如果数据通过Window自带的记事本软件打开,我们还可以读懂里面的内容,就使用字符流;否则使用字节流。如果不知道该使用那种类型的流,就使用字节流(万能流)。
字节流:
字节流抽象基类:
1.InputStream:这个抽象类是表示字节输入流的所有类的超类。
2.OutputStream:这个抽象类是表示字节输出流的所有类的超类。
两个都是继承于Object。
子类名特点:子类名称都是以其父类名为子类名的后缀。
字节流总结:
字符流:
为什么出现字符流:
一个汉字的存储:如果时GBK编码,占用2个字节;如果是UTF-8编码,占用3个字节。
由于字节流操作中文不是特别方便,所以JAVA就提供了字符流(字符流=字节流+编码表)。
用字节复制文本文件时,文本文件也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼接成中文,如何识别是中文呢----汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数。
字符流抽象基类:
Reader:字符输入流的抽象类。
Winter:字符输出流的抽象类。
转换流:
OutputStreamWriter类: 将字节输出流变为字符输出流。
InputStreamReader类 : 将字节输入流变为字符输入流。
字符流小结:
注意:
便捷类(便捷类是不能做到解码和编码的过程,只能使用到默认的UTF-8;但是还是可以用到父类的读写的代码;要实现解码编码就要使用他们对应的父类):FileReader;FileWriter。
字符流与字节流的区别以及使用场景:
区别:
1.字节流操作的基本单元是字节;字符流操作的基本单元是字符。
2.字节流默认不使用缓冲区;字符流使用缓冲区。
3.字节流通常用于处理二进制数据,不支持直接读写字符;字符流通常用于处理文本数据。
4.在读写文件需要对文本内容进行处理:按行处理、比较特定字符的时候一般会选择字符流;仅仅读写文件,不处理内容,一般选择字节流。
应用场景:
字节流比较万能,能处理文本、音频、图片。
字符流运用于文本,但是如果文本中的中文比较多,字符流会比字节流便捷,处理文本多用字符流。
注意:所有是IO流相关的操作,最后都要释放资源。