IO

Day19-IO

  1. 复习之数据结构
    数据结构是计算机存储和组织数据的方式,简单来说 就是用来存储数据的,只不过根据存储的方式和操作以及特性不同,分为几类
    数组 : 有序可重复,查询快更改快,删除添加慢
    链表 : 有序可重复,添加删除快,查询更改慢
    散列表 : 无序不可重复,存储键值对,key唯一,value可以重复
    Tree : 无序不可重复,元素按照某种规则自动排序,(Comparator和Comparable)

他们的本质都是用来保存数据的,我们需要把他们的特征记住,然后再根据我们的需求合理选择数据结构进行存储数据,效率会有所提升

  1. IO
    在这里插入图片描述

2.1 概述

  • 流是一组有顺序的,有起点有重点的字节集合,是对数据传输的总称或抽象
  • 简单来说 就是设备之间的数据传递称为流
  • 流的本质 就是数据的传输,根据不同的数据传输特性,抽象出各种类,方便我们直接操作数据
    • 流中的操作对象是指内存中,当前操作的程序而言
  •  输入 : 指往内存中导入数据
    
  •  输出 : 指从内存中写出数据
    
  • I : input 输入
  • O : output 输出
    2.2 分类
    按处理数据类型的不同,分为字节流和字符流
    按数据流向的不同,分为输入流和输出流。(入和出是相对于内存来讲的)
    在这里插入图片描述

按功能不同,分为节点流和处理流
节点流:直接操作数据源
2.3 四大抽象类
InputStream 字节输入
OutputStream 字节 输出
Reader 字符输入
Writer 字符输出
2.3.1 InputStream 字节输入
在这里插入图片描述
在这里插入图片描述

2.3.2 OutputStream字节 输出

在这里插入图片描述
在这里插入图片描述

2.3.3 Reader字符输入
在这里插入图片描述
在这里插入图片描述

2.3.4 Writer 字符输出

在这里插入图片描述
在这里插入图片描述

2.4 文件流

  • 原始文件流 : 用于打开链接,操作数据
  •  1 FileInputStream  字节输入
    
  •  2 FileOutputStream  字节输出
    
  •  3 FileReader		字符输入
    
  •  4 FileWriter			字符输出
    

分类 字节流 字符流
文件输入流 FileInputStream FileReader
文件输出流 FileOutputStream FileWriter

2.4.1 FileInputStream
2.4.1.1 概述

  • java.io.InputStream

  •  java.io.FileInputStream; 按照自己的方式在原始文件中读取数据
    
  • 想要读取一个文件,必须要找到它

  • 怎么找? 定位到某个文件 有两种方式, 1 绝对路径 2 相对路径

  • 相对路径 : 相对当前文件,如何找到 ./ 当前目录 , …/ 上级目录, …/…/…/ 上上上级目录 , / 下级

  • 绝对路径 : 以系统跟目录为准,如何找到这个文件

2.4.1.2 常用方法

// 读取数据
// 读取一个字节,返回下一个字节的值,因为开始光标在顶端,如果到达文件末尾(后面没有了) 就返回-1
int i1 = fis.read();

在这里插入图片描述

在这里插入图片描述

	字符 换成字节 :换个类 换个方法
换成输出 : 换个对象 换个方法

2.4.1.3 Read
Read( ) 返回下一个字节的值,如果到达文件末尾 返回 -1

在这里插入图片描述
在这里插入图片描述

2.4.1.4 Read(byte[] bytes)

  • read 方法重载
  •  可以无参,可以传入一个byte数组,
    
  •  read(byte[] b) : 使用字节数组来存储读取的数据,并一次返回(要么数组装满,要么到达文件末尾),可以提高读取效率
    
  •  	返回值 是本次读取到的字节个数,如果到达文件末尾 返回-1
    

在这里插入图片描述

在这里插入图片描述

2.4.2 FileReader
2.4.2.1 概述

  • FileRead : 一次读一个字符,也就是2字节,而 unicode编码也是2字节

  • 所以 字符串输入流 一般用于读取纯文本文件,像压缩包,图片等还是使用字节流
    2.4.2.2 常用方法
    在这里插入图片描述

  • read一样有方法重载,

  •  read() : 读取一个字符,返回下一个的字符数据,到达文件末尾返回-1
    
  •  read(char[] c) : 读取一个字符数组,返回读取到的字符数,到达文件末尾返回-1
    

2.4.2.3 使用方式
字符不会出现乱码问题 纯文本用字符

在这里插入图片描述

2.4.3 FileOutputStream
2.4.3.1 概述

  • java.io.OutputStream

  •  java.io.FileOutputStream
    
  •  	将程序中内容 写出到硬盘中
    
  • 输入流 找不到指定文件 会报错 , 但是输出流不会报错,会自动创建该文件,但是不会创建文件夹(目录)
    2.4.3.2 常用方法
    在这里插入图片描述

  • 构造方法 :

  •  	FileOutputStream(String) : 把内容输出到指定文件中,并会覆盖原文件中内容
    
  •  	FileOutputStream(String,boolean) : 如果第二个参数是true,把内容输出到指定文件中,并在原文件中追加数据
    
  • 成员方法 :

  •  write(int i) : 写出整型
    
  •  write(byte[] b) : 写出字节数组,想要输出字符串可以利用字符串中的getBytes()方法,把字符串转换为字节数组
    
  •  flush() : 刷缓存,强制把缓冲区写出,避免造成数据遗漏
    

2.4.3.3 使用方式

没有这个文件就生成这个文件 运行一次就添加一次数据
在这里插入图片描述

2.4.4 FileWriter
2.4.4.1 概述

  • java.io.Writer
  •  java.io.File.Writer  字符输出流
    
  • 和字节输出流基本一致,新增字符串写出
    2.4.4.2 常用方法

在这里插入图片描述

2.4.4.3 使用方式

在这里插入图片描述

在这里插入图片描述

2.5 缓冲流
2.5.1 概述

  • 缓冲流 是包装流,创建对象的时候,传入的参数不再是文件地址,而是文件流对象
  • 作用 : 把每次读入的数据存入到一个缓冲区,然后一次写入
  •  	把输出的数据存入一个缓冲区,然后一次写出
    
  • 如果缓存流关闭,那么传入的对应的文件流对象也会被关闭
  •  BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter
    
  •  针对字符操作,提供了两个新方法
    
  •  		readLine() : 读一行,返回值就是读到的这一行的数据,到达文件末尾,返回null
    
  •  		newLine() : 换行,就等于\n
    

分类 字节流 字符流
文件输入流 BufferedInputStream BufferedReader
文件输出流 BufferedOutputStream BufferedWriter

【特点】
主要是为了提高效率而存在的,减少物理读取次数
提供readLine()、newLine()这样的便捷的方法(针对缓冲字符流)
2.5.2 BufferedInputStream
和 FileInputStream方法几乎一致,只是效率提高
在这里插入图片描述

2.5.3 BufferedOutputStream
在这里插入图片描述

2.5.4 BufferedReader

新增方法 readLine() 读取一行

在这里插入图片描述

2.5.5 BufferedWriter
新增输出换行方法 newLine()

在这里插入图片描述

2.6 转换流
2.6.1 概述

  • 转换流 是字节流和字符流之间转换 的桥梁,可以通过转换 流把字节流转换为字符流
  •  并且 还可以再转换过程中 指定字符编码
    

在这里插入图片描述

特点
转换流是指将字节流向字符流的转换,主要有InputStreamReader和OutputStreamWriter
InputStreamReader主要是将字节流输入流转换成字符输入流
OutputStreamWriter主要是将字节流输出流转换成字符输出流

2.6.2 InputStreamReader
2.6.2.1 常用方法
在这里插入图片描述
在这里插入图片描述

2.6.2.2 使用方式

在这里插入图片描述

2.6.3 OutputStreamWriter
参考上面InputStreamReader的字节 转字符即可

2.7 打印流
2.7.1 概述

【特点】
打印流是输出最方便的类
包含字节打印流PrintStream,字符打印流PrintWriter
PrintStream是OutputStream的子类,把一个输出流的实例传递到打印流之后,可以更加方便地输出内容,相当于把输出流重新包装一下
PrintStream类的print()方法被重载很多次print(int i)、print(boolean b)、print(char c)

【标准输入/输出】
Java的标准输入/输出分别通过System.in和System.out来代表,在默认的情况下分别代表键盘和显示器,当程序通过System.in来获得输入时,实际上是通过键盘获得输入。当程序通过System.out执行输出时,程序总是输出到屏幕。

在System类中提供了三个重定向标准输入/输出的方法
static void setErr(PrintStream err) 重定向“标准”错误输出流
static void setIn(InputStream in) 重定向“标准”输入流
static void setOut(PrintStream out)重定向“标准”输出流
2.7.2 使用方式
在这里插入图片描述

2.7.3 练习题
使用打印流 完成文件复制

比如 把 D盘下 123.txt 复制到 E盘下 123.txt

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值