IO流的引入,本质,分类,三要素
IO流的分类
按照数据类型分类
- 字节流:一般针对二进制文件【视频,音频,图片】
- 字符流:一般针对文本文件【xml,json,html,txt,md…】
按照流向分
- 输入流:从外界到内存
- 输出流:从内存到外界
综合分类
- 字节流
字节输入流 XXXInputStream
字节输出流 XXXOutputStream - 字符流
字符输入流 XXXReader
字符输出流 XXXWriter
流的操作三要素:(*******************)
- 数据源:数据需要从哪里到内存?
- 目的地:数据从内存到哪里去?
- 交通工具:
a.弄明白到底需要输入流还是输出流,也有可能两个都需要
b.根据确定的流向在IO流框架中选取自己认为最适合的流
例子:(需求:向文本里写入“HelloWorld”)
public class ByteIODemo01 {
public static void main(Sting[] args) {
/*
* 数据源:内存中的HelloWorld
* 目的地:文本文件a.txt
* 交通工具:输出流
*/
String s = "HelloWorld";
File f = new File("a.txt");
OutputStream os = new FileOutputSteam(f);
// 将字符串转换成字节数组
byte[] bys = s.getBytes();
os.write(bys);
os.close();
}
}
字节输出流
字节输出流
-
void close( )
关闭此输出流并释放与此流有关的所有系统资源。 -
void flush( )
刷新此输出流并强制写出所有缓冲的输出字节。 -
void write(byte[ ] b)
将b.length 个字节从指定的byte数组写入此输出流。 -
void write (byte[ ] b, int off , int len)
将指定byte 数组中从偏移量off 开始的len 个字节写入此输出液。 -
abstract void write (int b)
将指定的字节写入此输出流。
1.针对字节流可以不适用flush,针对字符流必须flush,建议都要flush
2.close释放流的资源,同时自带flush
java.io.FileNotFoundExceotion
产生的原因:
- 文件盘符不存在
- 文件路径父目录不存在
java.io.IOException: Stream Closed
产生原因:
- 文件流已经关闭还在继续使用
举一个例子:
public class ByteIODemo02 {
public static void main(String[] args) throws Exception {
OutputSteam os = new FileOutputSteam("/os.txt");
byte[] bys = {97,98,99,100};
os.write(bye,1,2);
os.flush();
os.write(100);
os.flush();
os.write("100".getBytes());
os.flush();
os.close();
}
}
文件字节输出流
构造方法
成员方法
注意:
在不用的操作系统中对换行符的支持不一样
window \r\n
Linux \n
Mac \r
- 字节流在处理换行符的方面不方便
- 带append参数的表示追加写入
举一个例子:
public class ByteIODemo03 {
public static void main(String[] args) throws Exception {
FileOutputSteam fos = new FileOutputSteam("fos.txt",true);
for(int i = 1; i<= 10; i++) {
fos.write(("HelloWorld" + i).getBytes());
fos.write("\r\n".getBytes());
fos.flush();
}
fos.close();
}
}