File类
- 路径分类:绝对路径、相对路径
- 绝对路径:从根目录开始的路径,称为绝对路径
Windows系统中:盘符目录就是根目录,D:、E:
Linux系统中:/就是根目录,从/开始的路径就是绝对路径
- 相对路径:相对于某个路径而言的路径
相对于不同的路径,同样的相对路径,表达的是不同的路径
Dos命令行中:相对于当前路径(Dos命令行所在的路径),a/b/c.txt
Idea中:相对于当前工程的根目录
输入,输出,都是相对应用程序来说的。数据流向程序,叫做输入流。数据从程序流出叫做输出流。
IO分类
分类的方式有两种:按照功能可以分类,按照流向也可以分类
按照功能分类:
字节流:可以直接操作字节的流对象
字符流:可以直接操作字符的流对象
按照流向分类:
输入流:其他设备流到内存的流对象
输出流:内存流到其他设备的流对象
IO流的体系结构,根据分类,有四种流对象的类型
字节流:
字节输入流:InputStream
字节输出流:OutputStream
字符流:
字符输入流:Reader
字符输出流:Writer
InputStream
InputStream是一个抽象类,不能直接创建对象,只能由子类创建对象,最常用子类 FileInputStream,用于和磁盘上的文件进行交互。
常用方法
read():从当前的字节输入流中,获取一个字节
read(byte[] arr):将arr.length个字节,读取到arr中
read() 方法
一次读到一个字节。输出这个数据到控制台上发现,显示的是数字而不是字母。为什么?因为显示的是字母对应的码值,如果需要转成字符,可以强转成char类型。
当read()的值为 -1 时,表示读到文件的末尾。
read(byte[] arr)
使用read方法的时候,流需要读一次就处理一次,可以将读到的数据装入到字节数组中,一次性的操作数组,可以提高效率。
read方法返回的是往数组中存了多少字节。
close()
使用完流后,一定要关闭。 close()
OutputStream
字节输出流的顶层抽象父类,最常用子类FileOutputStream
仔细查看a.txt文本文件发现上述程序每运行一次,老的内容就会被覆盖掉。那么如何不覆盖已有信息,能够往a.txt里追加信息呢。查看API文档,发现FileOutputStream类中的构造方法中有一个构造可以实现追加的功能FileOutputStream(File file, boolean append) 第二个参数,append - 如果为 true,则将字节写入文件末尾处,而不是写入文件开始处。
Reader
Reader是抽象类,常用实现类FileReader。
常用方法
int read() 读取一个字符,-1表示读到文件的末尾。
int read(char[] cbuf) 将字符读入数组,返回值表示读到了多少个字符。
close()关闭流
Writer
Writer是抽象类,常用实现类FileWriter
常见的方法
write(ch): 将一个字符写入到流中。
write(char[]): 将一个字符数组写入到流中。
write(String): 将一个字符串写入到流中。
flush():刷新流,将流中的数据刷新到目的地中,流还存在。
close():关闭资源:在关闭前会先调用flush(),刷新流中的数据去目的地,然后流关闭。