字节流
(1)定义:面向字节的操作,以8位为单位对二进制的数据进行操作,对数据不进行转换,
这些类都是InputStream和OutputStream的子类。
属性
1)分类:
1-流向
输入流 读取数据
输出流 写出数据
2-数据类型
字节流
字节输入流--InputStream
字节输出流--OutputStream
字符流
字符输入流--Reader
字符输出流--Writer
注意:
1-如果我们没有明确说明按照什么分,默认按照数据类型分。
2-除非文件用windows自带的记事本打开我们能够读懂,才采用字符流,否则建议使用字节流。
3-每种基类的子类都是以父类名作为后缀名
2) FileOutputStream写出数据
构造方法
FileOutputStream(File file)
FileOutputStream(String name)
常用方法:
public void write(int b):一次写一个字节
public void write(byte[] b):一次写一个字节数组
public void write(byte[] b,int off,int len):一次写一个字节数组的一部分
1-操作步骤
1.创建字节输出流对象
2.调用write()方法
3.释放资源
2-代码体现:
FileOutputStream fos = new FileOutputStream("fos.txt");
fos.write("hello".getBytes());
fos.close();
3-要注意的问题?
1.创建字节输出流对象做了几件事情?
调用系统功能去创造文件
创建IO流对象
把IO流对象指向这个文件
2.为什么要close()?
让流对象变成垃圾,这样就可以被垃圾回收器回收
通知系统去释放跟该文件相关的资源
3.如何实现数据的换行?
换行符:
Window:\r\n
Linux:\n
Mac:\r
4-如何实现数据的追加写入?
用构造方法带第二个参数是true的情况
FileOutputStream/FileWriter(String fileName, boolean append)
3) FileInputStream读取数据
1-操作步骤
1.创建字节输入流对象
2.调用read()方法
3.释放资源
读取数据的方式:
int read():一次读取一个字节
int read(byte[] bys):一次读取一个字节数组
2-代码体现:
FileInputStream fis = new FileInputStream("fos.txt");
//方式1
int by = 0;
while((by=fis.read())!=-1) {
System.out.print((char)by);
}
//方式2
byte[] bys = new byte[1024];
int len = 0;
while((len=fis.read(bys))!=-1) {
System.out.print(new String(bys,0,len));
}
fis.close();
4)字节缓冲区流
1-BufferedOutputStream--写入数据
2-BufferedInputStream--读取数据
IO-字符流