1、流的概述与分类
A:IO流概述:
IO流用来处理设备之间的传输数据
java对数据的操作是通过流的方式
java对于操作流的对象都在IO包中
B、IO流的分类
a、按照数据流向
输入流 读入数据
输出流 写入数据
b、按照数据类型
字节流:可以读写任何类型的文件 比如音频 视频 文本文件
字符流 只能读写文本文件
什么时候使用哪种流?
如果能用自算计自带的笔记本打开,就用字符流,其他用字节流
如果你什么都不知道,用字节流
2、字节流和字符流的抽象基类
字节流的抽象基类:
InputStream OutputStream
字符流的抽象基类:
Reader Writer
注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
3、字节流Fileoutputstream的构造方法
FileOutputStream(File file)//会自动帮你创建文件
FileOutputStream(String name)
注意事项:
创建字节输出流对象了做了几件事情?
a:调用系统资源创建a.txt文件
b:创建了一个fos对象
c:把fos对象指向这个文件
为什么一定要close()?
a: 通知系统释放关于管理a.txt文件的资源
b: 让Io流对象变成垃圾,等待垃圾回收器对其回收
写入的方法:
FileOutputStream的三个write()方法
public void write(int b):写一个字节 超过一个字节 砍掉前面的字节
public void write(byte[] b):写一个字节数组
public void write(byte[] b,int off,int len):写一个字节数组的一部分
换行
FileOutputStream写出数据如何实现数据的换行
windows下的换行符只用是 \r\n
Linux \n
Mac \r
追加写入
FileOutputStream fos = new FileOutputStream(“fos.txt” , true) ; // 完成追加写入(如果不追加写入,会覆盖前面文件的内容)
复制文件:(模板)
// 创建字节输入流对象和字节输出流对象
FileInputStream fis = new FileInputStream(“D:\xiaoshuo.txt”) ;
FileOutputStream fos = new FileOutputStream(“E:\xiaoshuo.txt”);
// 一次读取一个字节数组复制文件
byte[] bytes = new byte[1024] ;
int len = 0 ;// 作用: 记录读取到的有效的字节个数
while((len = fis.read(bytes)) != -1){
// 写数据
fos.write(bytes , 0 , len) ;
}
// 释放资源
fos.close() ;
fis.close() ;
3、高效的字节流
A:缓冲思想
字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,
这是加入了数组这样的缓冲区效果,java本身在设计的时候,
也考虑到了这样的设计思想(装饰设计模式后面讲解),所以提供了字节缓冲区流
B:BufferedOutputStream的构造方法
查看API
BufferedOutputStream(OutputStream out)
A:BufferedInputStream的构造方法
BufferedInputStream(InputStream in)
public class MyDemo {
public static void main(String[] args) throws IOException {
BufferedInputStream in = new BufferedInputStream(new FileInputStream("b.txt"));
BufferedOutputStream out = new BufferedOutputStream(new FilterOutputStream(new FileOutputStream("E:/jj.txt")));
int len=0;
byte[] bytes = new byte[1000];
while ((len=in.read(bytes))!=-1){
out.write(bytes,0,len);
out.write("\r\n".getBytes());
out.flush();
}
in.close();
out.close();
}
}