一、Java的 IO 处理

1. input output 输入和输出

2. 输入? --学习对于学生来说 -- 由外面的信息到大脑 -- 由外存到内存

3. 输出? -- 授课对于老师来说 -- 由大脑到外部 -- 由内存到外存

4. 内存和外存? -- CPU可以直接访问的存储设备就是内存,反之就是外存

5. 内存--高速,易失,断电丢失、价格贵、容量小

6. 外存--较慢、永久、断电还在、较便宜、较大

7. 大脑记忆有限、大脑里想处理速度比较快

8. 程序都要在内存吕运行,持久保存的数据就要放在外存(硬盘属于外存)

9. 计算机外存保存数据的管理单位---文件

二、文件对象

1. 抽象 ---文件名、大小、类型、创建时间、最后修改时间...

2. Java 的 jdk里面提供了文件类型,对文件对象进行描述

3. 如何创建文件对象

1) 文件路径的分割符号 windowsXP之前,只能用 \,但其本身在编程中是转义符号,所以作为路径输出时,要用\\,windowsXP之后以及linux系统 可以使用/ 一个就可以了,也可以使用File.separator()来得到当前运行系统的路径分隔符号。

2) 文件对象可以是一个存在或不存在的文件,文件对象有方法可以创建文件,要捕获异常,文件对象不能往文件里读写数据。

3) 文件对象可以是文件夹或者文件

4) 文件夹可以创建,单个或者目录树

5) jdk里对于文件对象榀以获得所有的属性,可以设置部分属性

6) 能够进行部分基于的文件的操作,删除、改名 ....。

4. 列表文件夹下的所有的子文件和子文件夹

1) listFiles 只能得到一层

2) 递归操作,递归就是在方法里再调用方法自己3)执行时,调用代码会逐层打开新的方法体,直到最一个方法体结束返回,逐层向上返回,第一个打开的方法是最后一个关闭的,最后一个打开的方法是第一个关闭的。递归操作可以解决很多复杂过程循环,但资源消耗较大,慎用。

5. 流

1) 水流

2) 流的是水

3) 水分子

4) 给我接个水分子来我要喝,太小不好处理,没法处理

5) 处理的最小单位是水滴

6) 连续的水滴就构成了水流。

7) 源头 目标

6. 字节流

1) 流的是字节

2) 二进制位太小,没法操作,计算机处理的最小单位是字节(一个字节是8个二进制位)

3)连续的字节的传输就构成了字节流

4)源头和目标

5)输入输出 --- 方向

6) 输入流 --- 从外存到内存的字节流动

7) 输出流 --- 从内存到外存的字节流动

8) 计算机的基本数据就是字节,所有的流的本质都源于字节流。(字符流、对象流)

java里一个字符等于两个字节。

7. 字节流

1)文件字节流(端点流)

2)FileInputStream FileOutputStream

3) 一次一个字节的读取或者写入

4) 也可以以字节数组为单位读取和写入

5) 一个一个字节读取操作效率低

6) 基于文件字节流copy

7) 基于数组 copy 比单字节 copy 效率高的多,因为io开销小,但是也不能无限制的增加缓冲大小,浪费内存,还有开辟缓冲也要时间。

8)写入操作要注意,关闭前最好进行flush清空缓冲区处理,防止文件没有完全写入,而关闭输出管道。

9)操作完文件,需要用close来关闭管道。

10) 输出流如果不带append参数,则每次都新建新的文件

11)输出流如果逞append参数为true,则为追加模式,首次无文件则创建文件,如果文件存在,则在文件末尾追加。

12) 写入操作不需要提前创建文件,会自动新建

三、

1. 文件夹递归 copy

1) 输入被 copy的文件夹(考虑下判断是不是文件夹,是不是空的),全部复制到一个新的位置,保留原来的目录结构和文件名。

============================================================================================================================

一、字符流

1. 以字符为单位进行处理

2. Reader 和 writer 字符流的根类

3. FileReader 和 FileWriter 文本文件的字符流

4. 读取的单位是字符,一个或者一组,但是仍然不方便

二、缓冲流

1. 读到缓冲区里,想要多少自己来

2. 处置流(又叫缓冲流),读到东西需要进行处理后才继续

3. 不用关心字符读取多少个,可以以行为单位来读取

4. 使用起来比较灵活

三、Scanner模拟

1. New Scanner(System.in)

2. Scanner 类,其实就将 System.in (控制台产生的字节输入流),进入处理,将字节数据转换成我所需要的。

3. 数据流的来源,不只是文件

四、打印流

1. print 打印这个词,我们可以想到,它是一个字符输出流

2. PrintWriter 类可以将内存中的字节码代表的数值本身以字符串方式输出到

3. 商品管理---3.3

1) 主版本号.次版本号.编译号 (有些小修正、小修改重新编译下,每次编译,项目都产生一个编译号,用户拿到的不是源代码,而是机器码)

2)主版本号变化一般代表重大升级、主要功能变更

3)次版本号一般是小升级,奇数(测试版)和偶数(稳定版),

4) 编译修复一些小错误

5)增加菜单,输出所有商品信息到文本文档

i. 操作完毕给出文件位置

五、对象流

1) 流的是对象

2) 字节表示,计算机里的对象也是字节构成的,有他的字节结构

3) 可以把构成对象的字节序列化传输

4) 还能够将序列化的字节流还原成内存对象

5) 对象要支持序列化和反序列化

6) 举例超时空物质传输

2. 对象流--- objectInputStream objectOutputStream

1) 操作的单位是对象,对象的类要实现serializable 可序列化接口,传输时会加上对象头标记和尾标记,就可以从一串连续的字节中,截取出一个对象的字节码。

2) 读到的对象的字节码集合,如果有对应的类文件,则可以将其还原

3) 文件里保存的对象和内存中是一样的

4) 商品管理 4.0 -- 一旦主版本本升级,次版本自动归零

实现数据的读取和保存

i. 对整个 list 直接读取,因为 list 也是对象,读出来后强转成 List

ii. 刚打开文件时?

. 数据文件是否存在?

. 不存在的话, List ls = new ArrayList()

. 数据文件存在, ls = (List)ObjectInputStream对象.readObject()