IO流
IO:input、output
流:指的是程序中数据的流动方向
分类:
按流向分:
输入流:从文件到控制台(读取文件中的数据至控制台)
输出流:从控制台到文件(将控制台中的数据存储至文件)
按数据类型分:
**字节流:**使用单个字节进行数据传输(传输数据最基本单位为字节)
字节输入流 InputStream(抽象类)
字节输出流 OutputStream(抽象类)
**字符流:**使用单个字符进行数据传输(传输数据最基本单位为字符)
字符输入流 Reader(抽象类)
字符输出流 Writer(抽象类)
注意:I/O默认按照数据类型分类
流的使用
1、声明操作文件对象(new File(url))
2、创建相应的流(字节、字符、输入、输出流)
3、进相应的操作(读取、写入)
4、关闭流释放资源(输出流需要先进行刷新)
字节流
字节输入流
字节输入流的抽象类: 程序可以从数据源中连续读取字节的对象称为字节输入流,字节输入流的抽象类
方法 | 描述 |
---|---|
public void close() | 关闭输入流 |
public abstract int read() | 以数字的方式读取内容 |
public int read(byte[] b) | 将内容读到byte数组中,同时返回读入的个数 |
字节输出流
OutputStream: 程序可以向数据源中连续写入字节的对象称为字节输出流 ,字节输出流的抽象类
方法 | 描述 |
---|---|
public void close() | 关闭输出流 |
public abstract void write(int b) | 在数据流中写入一个字节 |
public void write(byte[] b,int off,int len) | 在数据流中写入一个指定范围的byte数组 |
public void write(byte[] b) | 在数据流中写入一个byte数组 |
public void flush() | 刷新缓冲区 |
文件字节输入流
FileInputStream:用于读取文件数据的流,继承于字节输入流
构造方法
FileInputStream(File file)
以指定文件对象作为数据源进行数据的读取
FileInputStream(String fileUrl)
以指定文件名创建对象并作为数据源进行读取
常用方法
int read()
每次从数据源中读取一个字节数据,返回读取长度,如果没有下一个要读取数据则返回-1
int read(byte[] b)
每次从数据源读取指定数组长度的数据并存入数组中,返回读取长度,如果没有下一个套读取数据则返回-1
void close()
关闭数据源释放资源
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
//文件字节输入流
//文件中以字节形式读取数据
public class FileInputSreamTest {
public static void main(String[] args) throws IOException {
// 构造方法
// new FileInputStream(file)
// 连接指定文件进行流操作
// new FileInputStream(name)
// 连接指定名称的文件进行流操作
// 流的使用
// 1创建指定文件
File file = new File("F://test/a.txt");
// 2创建相应操作流并指定文件
FileInputStream fis = new FileInputStream(file);
// 3进行相应操作
// int read = fis.read();// 读取一个字节,再次执行会向下读取返回指定字符ascii码值 没有则返回-1
// (1)fis.read()
// 每次读取一个字节数据并返回
// 当进行文字读取时,一个文字根据编码不同占用字节不同,会造成乱码
// int code=0;
// while((code=fis.read())!=-1){//现将读取的数据赋值给变量之后进行判断
// System.out.println((char)code);
// }
//(2)fis.read(byte[]);
byte[] b=new byte[1024];
int length=0;//每次获取数据的长度
while((length=fis.read(b))!=-1){
System.out.println(new String(b,0,length));
}
// 4关闭流释放资源
fis.