前言
IO流,它是Java种处理输入(将磁盘的数据输入到内存)和输出(将内存的数据输出到磁盘)数据的机制。
1 File类
(1)介绍
它是Java种表示一个文件或者目录的类,它与平台无关。
这个类中涉及到一些核心方法:创建、删除、重命名、修改时间、文件大小等。
(2)绝对路径和相对路径
绝对路径:是一个固定的路径,(在windows中)从盘符开始的。
相对路径:指相对于某个位置开始的路径
比如:我们在idea中进行编码,我们在E:\\WNHZ11\\code\\WNHZ11\\src下进行编码,其中E:\\WNHZ11\\code\\WNHZ11是我们的项目目录,这个目录下的src就是我们的“某个位置”,
我们的类在src\\com\\woniuxy\\day3\\io\\TestDemo.java
这个时候,我们要读取E:\\WNHZ11\\code\\WNHZ11\\imgs\\lixi.txt文档,那么路径该怎么写?
代码:E:\\WNHZ11\\code\\WNHZ11\\src\\com\\woniuxy\\day3\\io\\TestDemo.java
文件:E:\\WNHZ11\\code\\WNHZ11\\resources\\imgs\\lixi.txt
tartget/classes/com\\woniuxy\\day3\\io\\TestDemo.class
/imgs\\lixi.txt
绝对路径: new File("E:\\WNHZ11\\code\\WNHZ11\\resources\\imgs\\lixi.txt");
相对路径:new File("../resources/imgs/lixi.txt")
但是我们不推荐直接使用上面这个相对路径,因为你的代码会被编译生成class,然后编译过后路径中没有src。
使用类或者类的加载器作为相对路径
TestDemo.class的相对路径是以这个类本身作为“某个位置”。那么我们查询lixi.txt的相对路径:
../../../../../imgs/lixi.txt
TestDemo.class.getClassloader() : 类的加载器路径:
imgs/lixi.txt
结论: 读取文件,尽量类的加载器去读取相对路径。
(3)File类读取数据(推荐类加载器方式读取)
2 File类的常见方法
(1)读取一个 指定目录下的所有的子文件和子目录
递归
(2)统计目录的大小
(3)复制目录
3 IO流
3.1 简介
(1)按照流向
- 输入流 : InputStream/Reader
- 输出流 : OutputStream/Writer
(2)流的颗粒度(最小单位):
- 字节流:InputStream/OutputStream
- 字符流:Reader/Writer
(3)流的角色
- 节点流:可以从/向一个特定的IO设备(磁盘、网络)读写数据的流。它还有一个名字叫做低级流
- 处理流:对一个已经存在流进行包装的流,然后再实现数据的读写的流。高级流
3.2 流的原理以及数量(理解)
流可以被你想象一个“水管”。源头端和目的端相当于是两个“水桶”,数据就是水,水再两端之间通过水管传递。
以InputStream|Reader为例,水管中的每一滴水就是一个数据,如果是字节流,那么一个水滴就是一个字节。以字符流,那么一个水滴就是一个字符。
当创建一个流对象,in = new FileInputStream("path"),它底层有一个指针记录你的水从哪个位置开始传输。
3.3 InputStream
(1)FileInputStream
(2)SequenceInputStream
(3)ObjectInputStream | ObjectOutputStream
- 序列化|反序列化
序列化: 存档
反序列化:读档
实现序列化接口的目的是为了申明这个类可以被序列化和反序列化
- 写入
- 读取
3.4OutputStream
FileOuputStream | ObjectOutputStream | ...
(1)BufferedInputStream | BufferedOutputStream
3.5 字符流
3.6 打印流
3.7 系统标准流
System.in : 输入,控制台
System.out :输出, 控制台
System.err : 错误输出,控制台
3.8 转换流
3.9 ZipInputStream | ZipOutputStream
压缩和解压缩
(1)压缩
(2)解压缩
3.10 RandomAccessFile
3.11 LineInputStream
行号输入流,读取有一个文件的行号,帮助你自动统计文件的行数
作业:利用这个流,统计你的工程种的所有的java文件,计算你一共写了多少代码
3.12 Properties
支持持久化的哈希表,一般用作于配置文件