IO流:
intput(读取)
output(输出)
流:数据(字符、字节),1个字符等于2个字节,1个字节等于8个二进制位(比特位)
输入:把硬盘的数据读取到内存中
输出:把内存中的数据,写到硬盘中保存
顶层的父类:
字节输入流:inputstream,读取
字节输出流:outputstream,写入
字符输入流:reader,读取
字符输出流:writer
内存:关机就没了
硬盘:关机后还存在,所以需要写入输出到硬盘中。
二:字节流:一切皆为字节,
一切文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一 样如此。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底 层传输的始终为二进制数据。
四:io包
字节输出流:
outputstream是个输出所有字节流抽象类(超类),定义的都是一些子类共性的成员方法:
close()关闭
flush()刷新此输出流
write(byte[]b)将b.length字节从指定的字节数组写入此输出流
write(byte[]b,int off ,int len)从指定的字节数组写入此输出流
abstract write(int b):将指定的字节输出流
抽象类无法创建对象,必须要用子类:他的子类分别有六个:
ByteArrayOutputStream:
FileOutputStream:
FilterOutputStream:等六个
FileOutputStream:文件字节输出流,往文件中写字节数据
重点:FileOutputStream 继承 outputstream :文件字节输出流
作用:把内存中的数据写到硬盘文件夹中
构造方法:
FileOutputStream(String name):创建一个具有指定名称的文件中写入数据的输出文件流
FileOutputStream(File name):创建一个具有file对象表示的文件中写入数据的输出文件流
String name:目的地是一个文件的路径
File name:目的地是一个文件
构造方法的作用:(只能创建一个文件,不能创文件夹)
1:创建一个FileOutputStream对象
2:根据构造方法中传递的文件或文件路径,创建一个空的文件
3:会把FileOutputStream对象指向创建好的文件
五:字节输出流写数据到硬盘原理和步骤
写数据的原理:(内存-硬盘):java程序-jvm-os(操作系统)-os调用写数据的方法 - 吧数据写到文件中
字节输出流的使用步骤:
1:创建一个FileOutputStream对象,构造方法中传递写入的数据到目的地
2:调用FileOutputStream对象中的方法write,把数据写入到文件中
3:释放资源 (close)(流使用会占用一定的内存,使用完毕要把内存清空,提供程序的效率)
六:文件存储的原理和记事本原理
计算机都储存的是二进制数据,所以
写数据的时候,会把10进制的整数97转换为二进制的整数97
97-11000001
任意文本编辑器(记事本或者++)在打开文件的时候,都会查询编码表,把字节转换为字符表示
0-127:查询ASCII表
其他值:查询系统默认码表(中文系统GBK)
七:字节输出流写多个字节的方法
write(byte[]b):
一次性写多个字节:
如果写的第一个字节是正数(0-127),那么显示时候回查询ASCII表
如果写的第一个字节是负数,那么第一个字节会和第二个字节,两个字节组成一个中文显示,查询默认码表(GBK)
write(byte[]b,int off ,int len):
intoff:数组的开始索引
int len:写几个字节
将字符串转换byte字节数组:“你好”.getbytes()
utf-8:三个字节是一个中文
GBK:两个字节是一个中文
八:数据的追加写和换行写
追加写(续写):
使用两个参数的构造方法
FileoutputStream(String neme,boolean append)
FileoutputStream(File neme,boolean append)
File neme:写入数据的目的地
boolean append:追加写的开关,
ture:创建对象不会覆盖源文件,在末尾追加
false:创建新文件,覆盖源文件
换行:(直接写在打印语句里面即可)
Windows:\r\n或者 .newLine();
例:将你好输入换行
fos.write("你好".getbytes());
fos.write("\r\n.getbytes());
linux:/n
mac:/r
九:字节输入流(inputstream),io包,是个所有字节输入流抽象类(超类),定义的都是一些子类共性的成员方法:
int read()从输入流中读取数据的下一个字节。
int read(byte[]b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中
void close():关闭此输入流并释放与该流相关的索引系统资源。
抽象类,无法创建对象,需要用子类,有6个,重点研究Fileinputstream:文件字节输入流,继承了inputstream,作用:把硬盘文件的数据读取到内存中使用
构造方法:
Fileinputstream(string name)
Fileinputstream(File file)
string name:文件的路径
File file:文件
作用:
1:会创建一个Fileinputstream对象
2:会把Fileinputstream对象指定构造方法中要读取的文件
十:使用字节输入流读取文件
读取数据原理:java-jvm-os-os读取数据的方法-读取文件
字节输入流的使用步骤:
1:创建Fileinputstream对象构造方法中绑定要读取的数据源
2:使用Fileinputstream对象中的方法read,读取文件
3:释放资源
int read ()读取文件中的一个字节并返回,读取到末尾返回-1,例:读a b c ,读取a之后自动跳转到b,最后是-1,所以很麻烦,使用while循环,
例:int len =0;while(len=fis.read!=-1){sout(len)}
注意不能省略变量len哦!!!
十一:字节输入流读取数据的原理
十二:字节输入流一次读取多个字节方法
int read(byte[]b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中
了解:
String类的构造方法:
String(byte [] bytes):把字节数转化为字符串
String(byte [] bytes,intoffset,int length):把字节数组的一部分转换为字符串,offset:数组的开始索引,length:转化的字节个数。
明确两件事:
1:方法中的参数byte[]的作用?
起到缓冲作用,存储酶促读取到的多个字节
数组长度一般定义为1024,或者1024的整数倍
2:方法返回值int是什么?
每次读取的有效字节个数
读取也是重复过程,也可以使用whlie循环,结束条件:-1;
bayte[] bytes =new byte[1024];//存储读取到的多个字节
int len=0;//记录每次读取的有效字节个数
while((len.fis.read(bytes))!-1){sout(new string,0,len }
十三:练习:文件的复制
原理:一读一写
|
|