day9 字节流,字符流 ---知识都在Java.io 包中
知识点; 磁头
硬盘:特点是永久存储
内存; 临时存储
i; input 输入(读取) ---把硬盘中的数据,读取到内存中使用
o; output 输出(写入)----把内存中的数据,写入到硬盘中保存
流; 数据 字符,字节 (1字符=2字节;1字节=8个二进制位)
------------------------------------------
| 输入流 | 输出流
字节流 | inputstream | outputstream
字符流 | reader | writer
-----------------------------------------
字节流;--- 一切皆为字节;一切文件数据都是以二进制进行存储的
字节输出流的超类;outputstream;是个抽象类 --找到他的子类学习方法
公性方法:
java.io.fileoutputstream extends outputstream 这个类作用;把内存中的数据写入到硬盘的文件中
构造方法:作用:1.创建一个fileoutputstream对象 2.会根据构造方法中传递的文件/文件路径,创建一个空的文件 3.会把fileoutputstream对象指向创建好的文件
fileoutputstream(string name)创建一个向具有指定名称的文件文件中写入数据的输出文件流。参数---写入数据的目的;目的地是一个文件的路径
fileoutputstream(file file) 创建一个向指定file对象表示的文件中写入数据的文件输出流。 参数--目的地是一个文件
-----写入数据的原理:内存-->硬盘
java程序--jvm(java虚拟机)--os(操作系统)--os调用写数据的方法--把数据写入到文件中
-->字节输出流的使用步骤;
1.创建一个fileoutputstream对象,构造方法中传递写入数据的目的地
2.调用fileoutputstream对象中的方法write,把数据写入到文件中
3.释放资源(流使用会占用一定的内存,使用完毕要把内存清空,提供程序的效率)
------------------------------------------------------------
知识点; 任意的文本编辑器(记事本,notepad++..)在打开文件的时候都会查询编码表,把字节转换为字符表示。例如 0-127:会查询ASCII表。其他值:查询系统默认码表
---------------------------------------------------------------------
fileoutputstream的方法;一次写一个字节的方法
public void write(int b)
一次写多个字节的方法
public void write(byte[] b) 将b.length字节从指定的字节数组写入此输出流
(知识点:若第一个字节是整数(0-127),显示的时候会查询ASCII表,如果第一个字节是负数,那第一个字节会和第二个字节组成一个中文显示,查询系统默认码表(GBK)
public void write (byte[] b,int off,int len) 把字节数组的一部分写入到文件中 int off;数组的开始索引 int len;写几个字节
--知识点; java.lang包下的getbytes()方法,把字符串转换为字节数组
byte[] getBytes()
--------------------------------------------------------------------------
fileoutputstream 的双参数构造方法:
-- FileOutputStream(String name, boolean append)
创建一个向具有指定 name 的文件中写入数据的输出文件流。
-- FileOutputStream(File file, boolean append)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
参数:String name,file file;写入数据的目的地。
boolean append追加写开关; 注意true--创建对象不会覆盖源文件,继续在文件末尾追加写数据
false--创建一个新文件,覆盖源文件
知识点;换行--字符串"\r\n"
-----------------------------------------------------------------------------------
-------java.io.inputstream 抽象类; 是表示字节输入流的所有类的超类
----学习子类 fileinputstream; 叫做文件字节输入流; 作用--把硬盘文件的数据,读取到内存中使用
构造方法--fileinputstream(string name)
fileinputstream(file file)
----参数;读取文件的数据源
-- string name 文件的路径 --file file 文件
构造方法的作用--1.会创建一个fileinputstream对象
2.会把fileinputstream对象指向构造方法中要读取的文件 -->读取数据的原理(硬盘-->内存)
java程序-->jvm-->os-->os读取数据的方法-->读取文件
使用步骤--1.创建fileinoutstream对象,构造方法中绑定要读取的数据源
2.使用fileinputstream对象中的方法read读取文件
3. 释放资源
-------读取数据,可以发现是个重复的过程,所以可以使用循环优化;不知道次数用while循环
格式-----> int len=0; while((len=fis.read())!=-1){ sout(len) }
--->小知识。使用fileinputstream对象中的方法read,读取文件。读取一个字节并返回,读取到文件末尾返回-1
-----------------一次读多个字节
可以创建字节数组。继续使用int read(byte[] b)方法,从输入流中读取一定数量的的字节,并将其存储在缓冲区数组b中。
---》参数作用;1.起到缓冲作用,存储每次读取到的多个 字节,数组长度一般定义为1021或者1024的整数倍 2.方法的返回值int是什么: 是每次读取的有效字节个数
-----------------------------------------------------------------------------
文件的复制; 本质是一读一写
-->1.创建文件输入流读取硬盘文件,对象参数写源文件
2.创建文件输出流写入文件,对象参数写准备复制到哪里的目标文件
----3 .可以优化 创建字节数组。用循环,在把文件都读取了,下面方法体中直接就fos.writer方法写入 4.释放资源
------//////////////////////////////////////////////--------------------
字符流; 知识点-->字节流每次只能读取一个字节。而中文一个字占用2-3个字节(Gbk中占用两个字节,UTF-8占用3个字节)
----------------------字符输入流-----------顶层父类java.io.Reader;抽象类
应该掌握的共性的成员方法------ int read(); 读取单个字符并返回
int read(char[] cbuf) 一次读取多个字符,将字符读入数组
void close() 释放资源
---学习子类方法; java.io.FileReader extends InputStreamReader extends Reader
Filereader;文件字符输入流。作用--把硬盘文件中的数据以字符的方式拂去到内存中
----------------------字符输出流------------顶层父类java.io.Writer;抽象类
应该掌握的共性成员方法-------
---学习子类方法;java.io.FileWriter extends outputstreamwrrter extends writer
步骤;1. 创建FileWriter对象,构造方法中绑定要写入数据的目的地
2. 使用filewriter中的方法write,把数据写入到内存缓冲区(字符转换为字节的过程)
3.使用filewriter中的方法flush,把内存缓冲区的数据刷新到文件中
4.释放资源(会先把内存缓冲区中的数据刷新到文件中)
----------注意。刷新, flush 和close 都可以把把内容刷新到文件
区别---flush; 刷新缓冲区,流对象可以继续使用
close; 先刷新缓冲区,然后通知系统释放资源。流对象不能再使用
-----------------------------------------------------------------------------------
续写和换行; 跟字节流一样
处理流中的异常 --------try{}catch(){}finally{} 很麻烦
故在JDK7中增加了新特性,在try后面增加了()。
Jdk9的新特性,在try的前面可以定义流对象
-----------------------------------------------------------------------------------属性集; 类properties 表示了一个持久的属性集。可保存在流中或从流中加载
java.util.properties;extends hashtable<k,v> implements map<k,v>
跟流结合的方法;
步骤1.创建properties集合对象,添加数据2.创建字节/字符输出流对象,构造方法中绑定要输出的目的地3.使用properties集合中的方法store,把集合中的临时数据持久化写入到硬盘中存储4.释放资源 |
|