I/O流的基本主要内容

本文深入讲解Java中的IO流概念,包括字节流、字符流、功能流等的使用方法及其实现细节,如InputStream、OutputStream、Reader、Writer的读写过程,以及缓冲流、数据类型流、转换流的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

:一连串流动的数据
操作流程:数据源—>程序
流的分类:
流向:①输入流 ②输出流
操作单元:①字节流 ②字节流
功能:①节点流 ②功能流
字节流也被称为万能流(抽象类,表示字节输入流所有类的超类,不能实例化)
字节输入流 InputStream(类的方法都可以在API中查找)
流向:输入流
功能:节点流
方法int类型的read();表示每次从输入流中读入一个字节的内容
读入顺序:

1. 选择流
 InputStream is=new FileInputStream("D:/test.txt);创建对象并调用文件(若创建则可读入)
2. 准备一个字节数组载体
byte[] car=new byte[1024];规定使用1024字节或者其整倍数
3.读入
int len=-1;
while ((len=is.read())!=-1){
	System.out.println(new String(car,0,len));
	}以字符串的形式打印搬运载体中显示的所有内容(从索引0到len为-1的为止----当len为-1时表示当前扫描无字符,为空,默认输出-1)
 4. 关闭
is.close();

字节输出流OutputStream
输出流,作为抽象类是输出字节流所有类的超类
读出顺序:
1.选择流
OutputStream os=new FileOutputStream(D:/test.txt);

  • (括号内可再加,true表示自动追加,每次执行时不会删除之前执行写入的内容,而是继续添加。如果不加,则默认为,false表示每次执行时会覆盖之前的内容。)
    2.准备数据
    String str=“小明”;
    byte[] car=str.getBytes();字符串类型需要转换成字节型才能写出(如果是int等基础类型可以直接输出)
    3.写出
    os.write(car);直接输出car数组有自动编译功能,输出字符串
    4.强制刷出
    os.flush();
    5.关闭
    os.close();

字符流
字符输入流 Reader抽象类 子类是 FileReader输入流
字符输出流 Writer 抽象类 子类是 FileWriter输出流
Reader:
顺序
1.选择流
Reader read=new FileReader(D:/text.txt);
2.准备卡车载体
char[] car=new char[1024];字符流的char类型数组
3.读入
int len=-1;
while((len=read.read(car))!=-1){
System.out.println(new String(car,0,len));
}读取循环读取txt内容,直到读完数组内容,当读完后内容为空时返回-1,-1在转换成字符串时在txt中会隐藏消失
4.关闭
read.close();

Writer:
1.选择流
Writer write=new FileReader(D:/text.txt);
2.准备数据
String str=“小王”;
3.写出
write.wtrite(str);或write.append(str);
4.刷出
write.flush();

功能流
之一:缓冲流

作用:增强功能,提供性能
使用:功能流(节点流)

字节缓冲流:
字节输入缓冲流 BufferedInputStream
字节输出缓冲流 BufferedOutputStream
无新增方法
顺序
1.选择流
InputStream is=new BufferedInputStream(new FileInputStream(D:/text.txt));
OutputStream os=new BufferedOutStream(new FileOutputStream(E:/text.txt));
2.准备载体
byte[] car=new byte[1024];
3.读入写出
int len=-1;
while((len=is.read(car))!=-1){
os.write(car,0,len);
}
4.刷出
os.flush();
5.关闭
os.close();
is.close();//先开晚闭,关完写再关读

字符缓冲流
BufferedReader 有新增方法 readLine() 读取一行内容,不用再设置载体容量
BufferedWriter 有新增方法 newLine() 写出换行符
不能发生多态,因为父类引用对子类新增方法不可见
BufferedReader read=new BufferedReader(new FileReader(“D:/text.txt”);
BufferedWriter write=new BufferedWriter(new FileWriter(“D:/text01.txt”);

基本数据类型流 :读写带有基本数据类型的数据+String
基本数据类型流(字节节点流)
DataInputStream(InputStream): 新增方法: readXXX()
DataOutputStream(OutputStream): 新增方法: writeXXX()

EOFException:文件存在,但是内部无法读取,不是源文件
读取带有基本数据类型+字符串的数据
1.输入流
DataInputStream dis=new DataInputStream(new BufferedInputStream(new FileInputStream(D:/test.txt)));
2.读入
String s=dis.readUTF();
int i=dis.readInt();
double d=dis.readDouble();
System.out.println(s+" “+i+” "+d);
3.关闭
dis.close();

写出带有基本数据类型的数据
1.输出流
DataOutputStream out=new DataOutputStream(new BufferedOutputStream(new FileOutputStream(D:/test.txt)));
2.准备数据
int i=1;
double d=11.11;
boolean b=false;
String s=“小方”;
3.写出
out.writeInt(i);
out.writeDouble(d);
out.writeBoolean(b);
out.writeUTF(s);
4.刷出
out.flush();
5.关闭
out.close();

转换流
把字节流转换为字符流
InputStreamReader(InputStream,String charset)
OutputSteamWriter(OutputSteam,String charset)
可能出现乱码的情况:

  •  1.字符编码格式不统一
    
  •  2.缺少字节个数
    

不同编码格式汉字所占字节大小:
1. ISO-8859-1 – 1个字节
2. GBK ----------- 2个字节
3. GB2312 – -----2个字节
4. UTF-8 --------- 3个字节

Ex.
BufferedReader read=new BufferedReader(new InputStreamReader(new BufferedInputStream(new FileInputStream(D:/text.txt)),“gbk”));

BufferedWriter write=new BufferedWriter(new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(D:/text.txt)),“gbk”));
String

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值