文件及IO流

1、文件:

        在java中为程序人员对磁盘的操作定义了一个File类;它是文件和目录路径名的抽象表示;

文件和目录是可以通过File封装成对象的;对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的:具体方法看开发文档。

2、IO流

一、流:数据传输

1、按(流)数据传输方向:

                Input流:数据输入流

                Output流:数据输出流:

2、按(流)数据的类型:        

                字节流/字符流

3、使用场景

                纯文本文件,优先使用字符流

                图片、视频、音频等二进制文件。优先使用字节流

                不确定文件类型,优先使用字节流。字节流是万能的流

二、字节流

        在java中为字节流提供了两个抽象抽象基类:

                InputStream:这个抽象类是表示字节输入流的所有类的超类(抽象类)

                OutputStream:这个抽象类是表示字节输出流的所有类的超类(抽象类)

  1、 抽象类不能实例化:因此提供了两个实体类

                FileOutputStream(String name):创建文件输出流以指定的名称写入文件

       注意⚠️:使用字节输出流写数据的步骤

  • 创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)

  • 调用字节输出流对象的写数据方法

  • 释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源

具体方法:write写一个字节、write(byte[])写一个字节数组 、write(byte[],int off,int len)写一个字节数组从哪到那

字节流写数据如何实现换行

  • windows:\r\n

  • linux:\n

  • mac:\r

字节流写数据如何实现追加写入

  • public FileOutputStream(String name,boolean append)

  • 创建文件输出流以指定的名称写入文件。如果第二个参数为true ,则字节将写入文件的末尾而不是开头

FileInputStream(String name):通过打开与实际文件的连接来创建一个

字节输入流读取数据的步骤

  • 创建字节输入流对象

  • 调用字节输入流对象的读数据方法

  • 释放资源

方法:read();

2、字节缓冲流

        1、字节缓冲流

                BufferOutputStream:该类实现缓冲输出流。

                BufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组。

        2、构造方法:

BufferedOutputStream(OutputStream out)创建字节缓冲输出流对象
BufferedInputStream(InputStream in)创建字节缓冲输入流对象

⚠️:为啥构造方法需要的是字节流 而不是具体的文件或者路径? 因为字节缓冲流仅仅提供缓冲区 而真正的读写数据害得依靠基本的字节流对象进行操作

三、字符流

1、字节流

(1)、字符流介绍:由于字节流操作中文不是特别的方便,所以Java就提供字符流:字符流 = 字节流 + 编码表(字符集(是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等)(常用ASCII字符集、GBXXX字符集、Unicode字符集等)进行编码的表)

1、字符串中的编码解码问题【应用】

byte[] getBytes()使用平台的默认字符集将该 String编码为一系列字节
byte[] getBytes(String charsetName)使用指定的字符集将该 String编码为一系列字节
String(byte[] bytes)使用平台的默认字符集解码指定的字节数组来创建字符串
String(byte[] bytes, String charsetName)通过指定的字符集解码指定的字节数组来创建字符串

(2)字符流中的编码解码问题

字符流中和编码解码问题相关的两个类:

InputStreamReader:是从字节流到字符流的桥梁

它读取字节,并使用指定的编码将其解码为字符

OutputStreamWriter:是从字符流到字节流的桥梁

使用指定的编码将写入的字符编码为字节

InputStreamReader(InputStream in)使用默认字符编码创建InputStreamReader对象
InputStreamReader(InputStream in,String chatset)使用指定的字符编码创建InputStreamReader对象
OutputStreamWriter(OutputStream out)使用默认字符编码创建OutputStreamWriter对象
OutputStreamWriter(OutputStream out,String charset)使用指定的字符编码创建OutputStreamWriter对象

(3)字符流写数据的5种方式【应用】(字符流 相对于字节流是有缓冲的)close关闭流 先刷新

void write(int c)写一个字符(由于这只是一个缓冲区,写入的字符无法直接写入文件 最后还是要通过底层的字节流的写入方式写入 可通过刷新流 来矫正)
void write(char[] cbuf)写入一个字符数组
void write(char[] cbuf, int off, int len)写入字符数组的一部分
void write(String str)写一个字符串
void write(String str, int off, int len)写一个字符串的一部分

(4)刷新和关闭的方法

flush()刷新流,之后还可以继续写数据
close()关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据

(5)字符流读数据的2种方式(new String可以将字节数组、字符串数组转成字符串)

int read()一次读一个字符数据
int read(char[] cbuf)一次读一个字符数组数据

2、字符缓冲流

(1)字符缓冲流介绍

BufferedWriter:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或者可以接受默认大小。

BufferedReader:从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或者可以使用默认大小。

(2)构造方法

BufferedWriter(Writer out)创建字符缓冲输出流对象
BufferedReader(Reader in)创建字符缓冲输入流对象

(3)字符缓冲流特有功能【应用】

BufferedWriter:

void newLine()写一行行分隔符,行分隔符字符串由系统属性定义

BufferedReader:

String readLine()读一行文字。 结果包含行的内容的字符串,不包括任何行终止字符如果流的结尾已经到达,则为null

IO流小结:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值