四大抽象类:字节输入流(对应InputStream)字节输出流(对应OutputStream)字符输入流(对应Reader)字符输出流(对应Writer)
引入概念:
数据源:提供数据的原始媒介,如:数据库、文件、其他程序、内存、网络连接、IO设备。
原设备:为程序提供数据,对应输入流。
目标设备:程序数据的目的地,一般对应输出流。
IO的分类
- 流向:(相对程序而言)
输入流(read) input
输出流(write) output - 传输内容:
字节数据:图片、音频等
字节输入流:InputStream
字节输出流:OutputStream
字符数据:如abcd这种单个字符
字符输入流:Reader
字符输出流:Writer
但是要清楚不管是字节流还是字符流,底层流动的都是字节!(字符是字节加编码构成的) - 按处理对象不同分类
字节流:可以直接从数据源或者目的地读写数据
处理流:不直接连接到数据源的流,又叫包装流
先说
OutputStream
对应方法
- close()关闭此输出流并释放与次有关的所有系统资源。 flush()刷新此输出流并强制写出所有缓冲的输出字节。
- write(byte[] b)将b.length个字节从指定的byte数组写入此输出流。
- write(byte[] b,int off,int len)将指定byte数组中从偏移量off开始的len个字节写入此输出流
- wirte(int b)将指定字节写入此输出流。
OutputStream的子类:
FileOutputStream(Sting name);
创建一个向具有指定名称的文件中写入数据的输出文件流
FileOutputStream(File file);
创建一个向指定File对象表示的文件中写入数据的文件输出流
步骤:
- 创建流对象
- 把数据变成字节数据
- 用管道传输数据到文件
- 关闭管道
下面是一个小实例:
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
public class FileDome8 {
public static void main(String[] args) throws Exception {
//调用构造方法创建流对象FileOutputStrem(Sting name)
//当有文件时流对象向对象输出数据,没有此名字的文件对象时,流对象会帮我们创建一个
FileOutputStream fot=new FileOutputStream("bb.txt"); //创建流对象以及文件对象,并将流管道接到文件上
String name="Hellow IO!";//创建要写入的字符数据
byte[] bytes=name.getBytes(); //调用String类里面的方法,将字符数据转化为字节数据。
//向文件中写入数据
fot.write(bytes);
//关闭管道
fot.close();
}
}
代码运行后,会在我的工程根目录下创建一个bb.txt文件,并将数据“Hellow IO!”写入文件中.(如下图)
下面演示另一种构造方法以及writre()方法的使用:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class FileOutputDome {
public static void main(String[] args) throws Exception {
File file=new File("bb//aa.txt");
FileOutputStream fot1=new FileOutputStream(file);
String name1="abcdefgh";
byte[] bytes=name1.getBytes();
fot1.write(bytes, 2, 5);
fot1.close();
}
}
此构造方法是以文件对象为参数,write方法是将字节数组的指定数据写入文件中(另一个write方法时是将单个字节数据写入文件中),运行结果如下:
从字节数组的二号元素开始写入五个数组元素。