Io流的概述
IO: I输入(Input),O 输出(Output)
1.什么是IO流?
数据流,IO是严格的“水流模型” 所以IO流是用来读写数据,或者传输数据。
注意:File只能操作文件对象本身,而不能读写文件数据,
读写文件数据应该使用IO流。
2.IO流的分类
(1): 按照流的方向可以分为:输入流和输出流。
1.输入流:输入流是用于读数据进来!
以内存为基准点,把磁盘文件中的数据或者网络介质中的数据流入到内存的流称为输入流。
2.输出流:输出流是用于写数据出去。
以内存为基准点,把内存中的数据
写出到磁盘文件或者网络介质中去的流称为输出流。
(2):按照流的数据单位可以分为:字节流和字符流。
1.字节流:如果流中的数据的最小单位是字节,这个流就是字节流。
也就是流会以一个一个的字节进行数据的传输。
2.字符流:如果流中的数据的最小单位是字符,这个流就是字符流。
也就是流会以一个一个的字符进行数据的传输。
字符流通常是用于传输文本文件数据的。
(3):字节输入流:以内存为基准点,把磁盘文件中的数据或者网络介质 中的数据 以字节的形式输入到内存中去的流。
字节输出流:以内存为基准点,把内存中的数据以字节的形式
写出到磁盘文件或者网络介质中去的流称为字节输出流。
字符输入流:以内存为基准点,把磁盘文件中的数据或者网络介质中的数据以字符的形式输入到内存中去的流。(一般针对文本文件)
字符输出流:以内存为基准点,把内存中的数据以字符的形式
写出到磁盘文件或者网络介质中去的流称为字符输出流。
常识:
英文字符和数字字符在任何编码集中通常都是占1个字节。
GBK一个中文通常是由2个字节组成的。
UTF-8一个中文通常是由3个字节组成的。
(4).使用方法
IO流的分类
字节流:
字节输入流 字节输出流
InputStream(抽象类) OutputStream(抽象类)
FileInputStream(实现类) FileOutputStream(实现类)
字符流:
字符输入流 字符输出流
Reader(抽象类) Writer(抽象类)
FileReader(实现类) FileWriter(实现类)
注意:io流每次写数据的时候会覆盖文件之前的数据。
如果不希望覆盖之前的数据,应该在构造器的第二个参数加上追加数据的参数true
(5).用法
1.FileOutputStream(字节输出流)
创建对象
FileOutputStream fos = new FileOutputStream(路径);
写出数据方法:
fos.write(int b); // 写一个字节出去
fos.write(byte[] b)// 写一个字节数组(桶)出去
fos.write(byte[] b , int offset , int len ); 只写字节数组的一部分出去
2.FileInputStream(字节输入流)
创建对象
FileInputStream fis = new FileInputStream(路径);
直接读取一桶水返回给我们把文件的字节全部装入到一个字节数组去。
byte[] buffer = fis.readAllBytes();
String st = new String(buffer);
3.FileReader(字符输入流)
创建对象
FileReader fr = new FileReader(路径);
char[] buffer = new char[4];
int len = 0 ;
while((len = fr.read(buffer)) > 0){
String rs = new String(buffer,0,len);
这里不要换行,文本内容自带换行!
System.out.print(rs);
4.FileWriter(字符输出流)
创建对象
FileWriter fw = new FileWriter(路径,true);
fw.write();
Properties类
1.什么是Properties类:
是一个Map集合。基于键值对存储数据的。 就是一个集合。
翻译过来的名字叫属性集合。 它通常代表的是一个属性文件
2.Properties的核心功能:
(1)可以把系统中的数据借助io流技术直接存储到一个属性文件中去。
属性文件后缀是.properties,里面是键值对。
属性文件一般作为系统或者后续框架技术的配置文件
2.用法
需求:把一个系统的用户名和密码存入到一个属性文件中去。
Properties prop = new Properties();
prop.setProperty("userName","admin");
prop.setProperty("passWord","003197");
{passWord=003197, userName=admin}
System.out.println(prop);
可以把系统中的数据借助io流技术直接存储到一个属性文件中去。
//store(OutputStream out, String comments)
// 把prop集合中的数据直接存储到一个属性文件中去
OutputStream os = new FileOutputStream("src/sys.properties");
// 参数一:文件输出管道
// 参数二:操作描述!随便写!
prop.store(os,"我爱你,Here is my system's userName and passWord!!");
os.close();