I/O
输入流:源——(读取)——>数据<——>程序
输出流:程序<——>数据——(写入)——>目标
java流
流概念
数据流向某个对象的数据序列, 并且到达这个对象的过程。
流与源数据和程序之间的关系
输入流:数据源数据流向计算机内存的过程
源数据流——(读取)————>程序
流与目标数据源和程序之间的关系
输出流:把数据从程序流向目标数据源的过程
程序————(写入)——>目标数据源
流的分类
按照流向划分:输入流,输出流
按照处理数据单元划分:字节流(字节输入流,字节输出流),字符流(字符输入流,字符输出流)
字节流:以字节为数据单位来处理的流(Byte:8位)
字符流:以字符为数据单位来处理的流(Char:16位)
流的基类:
按照处理数据单元划分:字节流(字节输入流InputStream基类,字节输出流OutputStream基类),字符流(字符输入流Reader基类,字符输出流Writer基类)
* 输入流:以InputStream(字节输入流)和Reader(字符输入流)为基类
* 输出流:以OutputStream(字节输入流)和Writer(字符输出流)为基类
InputStream
java.io.InputStream包
方法
|
说明
|
int read()
|
从输入流中读取单个字节,返回所读的字节数据
|
int read(byte[] b)
|
从输入流中读取最多b.length长度的字节,并存储在字节数组b中,保存的位置从off开始
|
int read(byte[] b,int off,int len)
|
从输入流中读取最多len长度的字节,保存到字节数组b中,保存的位置从off开始
|
void close()
|
关闭输入流
|
int available()
|
返回可以从输入流中读取的字节数目
|
skip(long n)
|
从输出流中跳过参数n指定数目的字节
|
mark(int readlimit)
|
标记输入流中的当前位置,以便可以使用reset()方法复位到该标记的位置
|
void reset()
|
将当前位置复位为上次调用mark()方法标记的位置
|
OutputStream
java.io.OutputStream包
方法
|
说明
|
void write(int c)
|
将指定的字节输出到输出流中
|
void write(byte[] buf)
|
将字节数组的输出到输出流中
|
void write(byte{} b,int off,int len)
|
将字节数组中off位置开始,长度为len的字节数据输出到输出流中
|
void close()
|
关闭输出流
|
void flush()
|
强制把任何被缓冲的已写的输出数据输出到输出流
|
IOException异常
File
File类的构造方法
方法
|
说明
|
File(String pathname)
|
接受文件名作为字符串
|
File(String dir,String subpath)
|
dir参数指定目录路径,subpath参数指定文件名
|
File(File parent,String subpath)
|
parent参数指定目录路径,subpath参数指定文件名
|
File类常用方法
方法
|
说明
|
boolean canRead()
|
接收文件作为字符串
|
boolean canWrite()
|
检查能否写入指定文件
|
boolean equals(Object obj)
|
将指定对象语调用的函数的对象进行比较
|
boolean exists()
|
测试文件是否存在
|
String getAbsolutePath()
|
返回此对象表示的文件的绝对路径
|
String getName()
|
返回此对象表示的文件的名称
|
String getParent()
|
返回此File对象的路径名的上一级,如果路径名没有上一级,则返回null
|
boolean isAbsolute()
|
测试习File对象表示的文件是否是绝对路径名
|
boolean isDirectory()
|
测试习File对象表示的文件是否是目录
|
boolean isFile()
|
测试习File对象表示的文件是否是普通文件
|
File类创建或删除文件和目录
方法
|
说明
|
boolean delete()
|
删除此对象指定的文件
|
boolean createNewFile()
|
创建空文件
|
boolean isDirectory()
|
测试此File对象表示的文件是否是目录
|
boolean mkdir()
|
创建由该File对象表示的目录
|
boolean mkdirs()
|
创建包括父目录的目录
|
Reader
java.io.Reader包
方法
|
说明
|
int read()
|
从输入流中读取单个字符,返回所读取的字符数据
|
int read(byte[] c)
|
从输入流中读取c.length长度的字符,保存到字符数组c中,返回实际读取的字符数
|
read(char[] c,int off,int len)
|
从输入流中读取len长度的字符,保存到字符数组c中,保存的位置从off位置开始,返回实际读取的字符长度
|
void close()
|
关闭流
|
boolean ready()
|
如果要读的流已经准备好,返回true,否则返回false
|
skip(long n)
|
从输入流中跳过参数n指定数目的字符
|
mark(int readlimit)
|
标记输入流中的当前位置,以便可以使用reset()方法 复位到该标记的位置
|
void reset()
|
将当前位置复位为上次调用mark()方法标记的位置
|
Writer
java.io.Writer包
方法
|
说明
|
write(String str)
|
将str字符串里包含的字符输出到指定的输出流中
|
write(String str,int off,int len)
|
将str字符串里从off位置开始长度为len的字符输出到输出流中
|
void close()
|
关闭流
|
void flush()
|
清空流
|
对象序列化
什么是序列化:将对象的状态存储到特定存储介质中的过程
(程序——>文件)
内存——(序列化)——>文本文件
对象保存成二进制文件
反序列化
:二进制文件转成对象
对象的二进制格式——(反序列化)——>对象
实现对象序列化(serializable)
支持可序列化(Serializable)
实现java.io.Serializable接口
对象序列化的步骤
创建一个对象输出流—ObjectOutputStream——>writeObject()方法输出序列化对象
对象反序列化
反序列化步骤