📄 io.txt
字号:
一、io流总结
io流是java非常重要的组件,有输入流及输出流,输入流是从文件到内存,输出流是从内存到
文件,输入流通用方法主要是read()或readLine(),输出流的主要方法是write或print。有低层
也有高层流,在创建高层流通过构造子将低层流注入到高层流中,让低层流的功能与高层流的功
能组合在一起。如果有缓存的高层流如BufferedInputStream、BufferedOuputStream、
BufferedReader、BufferedWriter要想写入文件必须flush或close。io流用的是装饰模式
,有通用接口、本原、装饰,因为可以将通用接口聚集到装饰中,所以可以通过构造子将
本原或装饰注入到另一个装饰中,将所有相关的装饰、本原的功能进行随意组合生成功能更加
强大的对象。当以字节、字节数组或字符、字符数组读取文件的内容,结束条件是-1,以字符串
的方式读取时,结束条件是否为空。
二、字节流:处理是二进制文件,通过专用的软才可以打开。xls,doc,mpg,数据库
输入:
体系结构
InputStream
FileInputStream FilterInputStream
BufferedInputStream ObjectInputStream DataInputStream
流的转化:
FileInputStream--->BufferedInputStream:具有缓存
FileInputStream-->ObjectInputStream:返序列化将文件转化为对象
FileInputStream-->DataInputStream:可以直接得到基础的数据类型
判断结束:
--读取一个字节
int temp=fis.read();
while(temp!=-1)
{
}
--读取字节数组
byte[] bytes=new byte[1024*20];
int result=fis.read(bytes);
while(result!=-1)
{
result=fis.read(bytes);
}
输出:
体系结构
OutputStream
FileOutputStream FilterOutputStream
BufferedOutputStream ObjectOutputStream DataOutputStream PrintStream
流的转化:
FileOutputStream--->BufferedOutputStream:具有缓存
FileOutputStream-->ObjectOutputStream:将对象转化为文件
FileOutputStream-->DataOutputStream:可以将基础的数据类型直接写入文件
写入的方式:
--写一个字节
int temp=System.in.read();
fos.write(temp);
--写字节数组
byte[] bytes=new byte[1024*20];
int result=fis.read(bytes);
fos.write(bytes,0,result);
--将字节转化为字符串
String temp=new String(bytes,0,result);
三、字符流:处理的是文本文件,通过记事本可以打开。
输入:
体系结构
Reader
FileReader InputStreamReader:将字节流转化为字符流
BufferedReader
流的转化:
FileReader--->BufferedReader:具有缓存
System.in-->InputStreamReader--->BufferedReader:将键盘的字节流转化为字符串,再转化为高层流。
FileInputStream--->InputStreamReader-->BufferedRearder:将文件的字节流转化为字符流,再转化为高层流。
判断结束:
--读取一个字符
int temp=fis.read();
while(temp!=-1)
{
}
--读取字节数组
char[] chars=new byte[1024*20];
int result=fis.read(chars);
while(result!=-1)
{
result=fis.read(chars);
}
--读取一行
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String temp=br.readLine();
while(!"stop".equals(temp))
{
temp=br.readLine();
}
输出:
体系结构
Writer
FileWriter OutputStreamWriter
BufferedWriter PrintWriter
流的转化:
FileWriter-->BufferedWriter:具有缓存
FileWriter-->PrintWriter:将对象转化为文件
FileWriter-->BufferedWriter-->PrintWriter
写入的方式:
--写一个字节
int temp=System.in.read();
fos.write(temp);
--写字符数组
char[] chars=new char[1024*20];
int result=fis.read(chars);
fos.write(chars,0,result);
--将字节转化为字符串
String temp=new String(chars,0,result);
三、File:是对文件或文件夹整体的操作如创建、删除、是否存在、是否是文件、是否是目录、得到所有子目录
File f=new File("c:\a.txt");
File files[]=f.fileList();
一、io流
二、装饰模式
有三个角色,分别是通用接口、本原、装饰,本原与装饰都实现了
通用接口,因为将通用接口聚集到了装饰中,所以可以将本原或
装饰聚集到另一个装饰中。通过构造子将一个装饰注入到另一个装饰
中后,可以将多个装饰的功能随意组合,生成更强大的功能。
其实用继承也是可以实现的,但多写很多类。
三、流的特点:
流分为输入流及输出流,输入流是从文件到内存,输出流是从内存到文件。
读取输入流的通用方法是read或readLine
写入到输出流的通用方法是write或print
流分为低层流与高层流,在创建高层流时通过构造子将低层流注入到高层流中,
不管是字节还是字符流都有很多高层流,根据自己的功能需要选择或组合实现。
如果用了带缓存的高层以必须flush或close将信息写入到文件中。
四、按存储分类
字节流:通过专用的软件才可以访问的文件。
xls、doc、pdf、数据库、rm、mp3
字符流:纯文本,用记事本就可打开
*.java *.txt *.c *.xml *.html
七、io流的实现
字节流:
输入:
输入的体系结构
InputStream
FileInputStream(文件的读写) FilterInputStream(高层流)
BufferedInputStream ObjectInputStream DataInputStream
从低层流转化为高层流:
FileInputStream---->BufferedInputStream
FileInputStream--->ObjectInputStream
FileInputStream--->DataInputStream
FileInputStream---->BufferedInputStream-->ObjectInputStream
输出:
输出的体系结构:
OutputStream
FiletOutputStream FilterOutputStream(高层流)
BufferedOutputStream ObjectOutputStream DataOuputStream PrintStream
PrintStream:在流中很重要,e.printStackTrace()及System.out.println()都是其实例,
即可以打印字节,也可以打印字符。
从低层流转化为高层流:
FileOutputStream---->BufferedOutputStream
FileOutputStream--->ObjectOutputStream
FileOutputStream--->DataOutputStream
FileOutputStream---->BufferedOutputStream-->ObjectOutputStream
FileOutputStream---->PrintStream
FileOutputStream---->BufferedOutputStream-->PrintStream
序列化:可以将一个对象写到文件中,可以读取文件将其转为对象。
1、对象所对应的类必须实现Serializable接口。
字符流:操作是字符
输入
输入的体系结构
Reader
FileReader InputStreamReader(将字节转化为字符流)
BufferedReader
输入的流的转化:
InputStream--->InputStreamReader-->BufferedReader
FileReader-->BufferedReader
输出:
输入的体系结构
Writer
FileWriter OutputStreamWriter(将字节转化为字符流)
BufferedWriter PrintWriter
八、PrintStream、BufferedWriter、PrintWriter
PrintStream:属于字节流的高层流,即可以打印字节也或打印字符
e.printStackTrace()及System.out.println是其实例
BufferedWriter、PrintWriter:属于字符流,只可以打印字符,具都有缓存
要想写入文件必须close或flush.
九、File及流的区别
File:是对文件整体的操作,如删、是否存在、得到文件容量、是文件还是目录。
Java IO的一般使用原则:
一、按数据来源(去向)分类:
1、是文件: FileInputStream, FileOutputStream, FileReader, FileWriter
2、是byte[]:ByteArrayInputStream, ByteArrayOutputStream
3、是Char[]: CharArrayReader, CharArrayWriter
4、是String: StringBufferInputStream, StringReader, StringWriter
5、网络数据流:InputStream, OutputStream, Reader, Writer
二、按是否格式化输出分:
1、要格式化输出:PrintStream, PrintWriter
三、按是否要缓冲分:
1、要缓冲:BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter
四、按数据格式分:
1、二进制格式(只要不能确定是纯文本的): InputStream, OutputStream及其所有带Stream结束的子类
2、纯文本格式(含纯英文与汉字或其他编码方式);Reader, Writer及其所有带Reader, Writer的子类
五、按输入输出分:
1、输入:Reader, InputStream类型的子类
2、输出:Writer, OutputStream类型的子类
六、特殊需要:
1、从Stream到Reader,Writer的转换类:InputStreamReader, OutputStreamWriter
2、对象输入输出:ObjectInputStream, ObjectOutputStream
3、进程间通信:PipeInputStream, PipeOutputStream, PipeReader, PipeWriter
4、合并输入:SequenceInputStream
5、更特殊的需要:PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader
决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):
首先,考虑最原始的数据格式是什么: 原则四
第二,是输入还是输出:原则五
第三,是否需要转换流:原则六第1点
第四,数据来源(去向)是什么:原则一
第五,是否要缓冲:原则三
(特别注明:一定要注意的是readLine()是否有定义,有什么比read, write更特殊的输入或输出方法)
第六,是否要格式化输出:原则二
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -