IO流:
根据数据的流向可以分为:
输入流 Input: 从硬盘中的文件读取的数据到内存中的java程序
输出流 Output: 从内存中的java程序向硬盘写数据
根据操作的数据分为:
字节流:
可以操作字节的流
计算机上的一切数据都是由字节构成 所以字节流可以操作一切数据
字符流:
可以操作字符的流,只能操作文本文件
作用:
可以向硬盘中的文件写数据或者读取硬盘中的文件数据
字节输入流
InputSrteam 所有字节输入流的超类 抽象类
方法:
int read() 读一个字节 一次读一个字节 返回值为读取的数据
int read(byte[] bytes) 读一个字节数组
int close() 关闭资源 IO流对象本身并不具备读写功能,需要调用操作系统的读写功能,读写完毕后,需要告知操作系统读取或者写入完成,否则操作系统会一直占用文件
一般都是先开后关
int返回值: 每次读取到的有效字节数
bytes数组: 缓冲的作用 将读取的数据存放到字节数组
常用的实现类:
java.io.FileInputStream
构造方法 绑定数据源
public FileInputStream(String path)
public FileInputStream(File file)
字节输出流
OutputStream 所有字节输出流的超类 抽象类
方法:
void write(int b) 写一个字节
void write(byte[] bytes) 写一个字节数组
void write(byte[] bytes,int start ,int length) 写字节数组的一部分
void Close() 关闭资源
常用实现类:
java.io.FileOutputStream
构造方法 绑定数据目的 b默认为false,如果写为true,则可以在文件上续写,不会覆盖
public FileOutputStream(String path,boolean b)
public FileOutputStream(File file,boolean b)\r\n 换行
如果没有指定的文件 创建一个新的空文件
如果指定的文件 已经存在 则 创建一个新文件 覆盖原来的文件
如果指定的路径不存在 则抛出 FileNotFoundException
字符输入流
Reader 所有字符输入流的超类 抽象类
方法:
int read() 一次读一个字符 返回的是读取到的字符 没有数据返回-1
int read(char[] chs) 一次读取一个字符数组 返回的是每次读取的有效字符数 没有数据返回-1
void close() 关闭资源
常用实现类:
java.io.FileReader
构造方法 绑定数据源
public FileReader(String path)
public FileReader(File File)
字符输出流
Writer 所有字符输出流的超类 抽象类
方法:
write(int c) 写一个字符
write(char[] chs) 写一个字符数组
write(char[] chs,int start ,int length) 写字符数组的一部分
write(String str) 写字符串
flush() 刷新缓冲区
close() 关闭资源 并刷新一次
注意:
字符输出流必须要刷新,如果不刷新,数据不进入数据目的
flush和close的区别
flush是刷新缓冲区 将数据从缓冲区中刷新到数据目的 刷新后就可以继续写数据
close是关闭资源,在关闭资源之前做一次刷新
Properties 属性集合
特点:
1.继承Hashtable 实现了Map接口,可以使用Map中的所有方法
2.没有泛型 键与值都是string
3.唯一一个可以与IO流直接结合使用的集合
方法:
String setProperty(string key, string value) 添加键值对
String getProperty(String key) 通过键取value
Set<string> stringPropertyNames() 获取set集合遍历
void load(InputStream in) 将文件中的键值对加载到集合中
void load(Reader r) 将文件中的键值对加载到集合中