一、 IO 流的概念简述
I:Input:输入(读取),把硬盘中的数据读取到内存中使用
O:Output:(输出、写入),把内存中的数据,写入到硬盘中保存
流:(字符、字节),1字符=2字节,1字节=8个二进制位
字节流:字节输入流:InputStream ,字节输出流:OutputStream
字符流:字符输入流:Reader,字符输出流:Writer
二、字节输出流写入数据到文件
Java.io.FileOutputStream extends OutputStream
FileOutputStream:文件字节输出流
作用:把内存中的数据读到硬盘的文件中
构造方法: FileOutputStream(String name):创建一个向具有指定名称的文件中写入数据的文件输出流
FileOutputStream(File file):创建一个向指定File对象表示的文件中写入数据的文件输出流
参数:写入数据的目的地
String File :目的地是一个文件的路径
File file:目的地是一个文件
构造方法的作用:
创建一个FileOutputStream对象
会根据对象中传递的参数,创建一个空的文件夹
会把创建好的FileOutputStream对象指向创建好的文件
写入数据的原理:(内存—>硬盘)
Java程序–>JVM(java虚拟机)–>OS(操作系统)–>os调用写数据的方法–>把数据写到文件中
字节输出流的使用步骤:
1、创建一个FileOutputStream对象,构造方法中传入写入数据的目的地
2、调用FileOutputStream对象中的方法write,把数据写到文件中
3、释放资源,流的使用会占用一定的内存,使用完毕要把内存清空,保证程序的效率
note:如果想要一次写入多个字节的话,就要定义一个字节数组,byte[ ] bytes={ ……};将bytes作为write 的参数传入即可。
常用方法:
void write(byte[] b) 将 b.length 个字节写入此输出流。
void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
void write(int b) 将指定 byte 写入此输出流。
如果写入的是字符的话,则使用getBytes()方法将字符串转换为字节数组:
byte[ ] bytes=“你好”.getBytes( );
数据的追加写和换行写:使用两个参数的构造方法:
FileOutputStream(String name,boolean append):创建一个向具有指定名称的文件中写入数据的文件输出流
FileOutputStream(File file,boolean append):创建一个向指定File对象表示的文件中写入数据的文件输出流
boolean append:追加写开关
true:创建对象不会覆盖原文件,继续在文件的末尾追加写数据
false:创建一个新文件,覆盖原文件
三、字节输入流
java.io.InputStream:字节输入流 此对象表示字节输入流所有类的超类
- 定义了所有子类共性的方法:
int read( )从输入流中读取数据的下一个字节
int read(byte[ ] b )从输入流中读取一定数量的字节,并将其储存在缓冲区数组b中
void close( )关闭输入流并释放与该流相关的所有系统资源 - java.io.FileInputStream extends InputStream
FileInputStream:文件字节输入流 作用:把硬盘中的数据读取到内存中使用
构造方法: FileInputStream(String name)
FileInputStream(File file )
参数:读取文件中的数据源
String name:文件的路径
File file :文件
构造方法的作用: 1、会创建一个FileInputStream对象
2、会把FileInputStream对象指向构造方法中要读取的文件 - FileInputStream读取数据的原理(硬盘—>内存)
java程序—>JVM—>OS—>OS读取内存的方法—>读取文件
字节输入流的使用步骤(重点):
1、创建FileInputStream对象,构造方法中绑定要读取的数据源
2、使用FileInputStream对象中的read方法,读取文件
3、释放资源
一次输入多个字节的方法:
int read(byte[ ] b) 从输入流中读取一定数量的字节,并将其储存在缓冲区数组b中 - 明确两件事情
1、方法参数byte[ ]的作用?
起到缓冲作用,存储每次读取到的字节
把数组的长度定义为1024(1KB)或1024的整数倍
2、方法返回值int是什么?
每次读取到的有效字节数
String类的构造方法:
String(byte[ ] bytes):把字节数组转化为字符串
String (byte[ ] bytes ,int offset,int length ):把字节数组的一部分转化为字符串,offset为 开始索引,length为转换的字节个数
//创建FileInputStream对象,绑定要读取的额数据源
FileInputStream inputStream =new FileInputStream(new File("./src/FileInputStream"));
/*
* 发现读取是一个重复的过程,可以使用循环优化,不知道有多少个字节,所以使用while循环
* while循环结束的条件,读到-1结束
*/
byte[] bs =new byte[1024];//存取读取到的多个字节
int num =0;//记录每次读取到的有效字节的个数
while((num=inputStream.read(bs))!=-1) {
System.out.println(new String(bs,0,num) );
}
inputStream.close();
- note:字节流读取 中文字符容易发生乱码的问题
一个中文:GBK:2个字节 UTF-8:3个字节
来源:https://blog.csdn.net/Dreaming_Joker/article/details/100653670