流
流,表示任何有能力产出数据的数据源对象或有能力接收数据的对象。流的本质是数据的传输,根据数据传输的特性可以将流抽象为各种类。
Java中的I/O操作主要指的是java.io包下的内容。
在Java中,输入也叫作读取,输出也叫作写出。
流的作用
为数据和目的地建立一个传输的通道。根据数据的流向,可以将流分为输入流、输出流。输入流指的是把数据从其他设备上(硬盘等)读取到内存中;输出流指的是把数据从内存中写出到其他设备。
流的分类
根据数据的分类,可以分为字节流和字符流。字节流即以字节为单位来读写数据的流;字符流即以字符为单位读写数据的流。
1字符 = 2字节 1字节(byte)= 8位(bit)
字节流
创建方式
//先创建一个File对象,例如 File file = new File("D:\\programFiles\\test.txt"); //将File对象传入 FileInputStream/FileOutputStream 对象 //输入流 InputStream inputStream = new FileInputStream(file); //输出流 OutputStream outputStream = new FileOutputStream(file);
读取
//InputStream 类中的read()方法可以帮助我们进行读取的操作 //该方法的返回值是int类型的,若返回-1则表示没有数据可读 //调用该方法需要传入一个字节数组来进行数据的接收 byte[] b = new byte[size]; int length = inputStream.read(b); while (-1 != length) { length = inputStream.read(b); }
写入
//InputStream 类中的write()方法可以帮助我们进行写入的操作 //该方法也需要一个字节数组来进行数据的发送,即把数组中的数据写入目标文件 String str = "zhangsan lisi wangwu"; byte[] b = str.getBytes(); outputStream.write(b);
字符流
创建方式
//创建File对象 File file = new File("D:\\test.txt"); //输入流 Reader reader = new FileReader(file); //输出流,第二个布尔型的参数为是否在文件末尾增加,若传入false或默认则直接覆盖文件内容 Writer writer = new FileWriter(file,true);
读取和写入
//read()方法,需要传入一个字符数组 reader.read(c); //write()方法,格式: write("测试数据",下标,长度); writer.write("测试数据",0,2);
字节流转换为字符流的案例
File file = new File("D:\\test.txt");
//创建字节流
OutputStream fileOutputStream = null;
//创建字符流
OutputStreamWriter writer = null;
try {
//传入File对象
fileOutputStream = new FileOutputStream(file);
//字节流传入字符流
writer = new OutputStreamWriter(fileOutputStream);
//字符流写入字符串 "123456"
writer.write("123456");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//释放资源
try {
fileOutputStream.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}