常用的类:
IO里最重要的就是5个类和1个接口
5个类:File、OutputStream、InputStream、Writer、Reader
1个接口:Serializable
主要的类如下:
1. File(文件特征与管理):
用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。
2. InputStream(二进制格式操作):
抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。
3. OutputStream(二进制格式操作):
抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。
4.Reader(文件格式操作):
抽象类,基于字符的输入操作。
5. Writer(文件格式操作):
抽象类,基于字符的输出操作。
6. RandomAccessFile(随机文件操作):
一个独立的类,直接继承至Object.它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。
IO体系主要包括三部分:
1.流式部分—IO的主体
2.非流式部分—主要包含一些辅助流式部分的类,比如说:File类、RandomAccessFile类和FileDescriptor等类
3.其他类—文件读取部分以及安全相关部分的类,比如说:SerializablePermission类,以及与本地操作系统相关的文件系统的类,比如说:FileSystem类和Win32FileSystem类和WinNTFileSystem类。
流式部分
IO流分为两种,字节流跟字符流
简单来说,区别如下:
输出方式:
字节流:没有缓冲区,直接就输出了,实时输出的。
字符流:先输出到缓冲区,然后才会从缓冲区输出去,只有在调用close()关闭缓冲区的时候才会输出去,要想在没关闭缓冲区之前就输出,那就需要调用flush()。
读写单位:
字节流:以字节(8bit)为单位。
字符流:以字符为单位,根据码表映射字符,一次可能读多个字节。Unicode编码方案的话一个字符占2个字节,即16bit。
处理对象:
字节流:能处理所有类型的数据,比如说图片,视频…..
字符流:只能处理字符类型的数据
结论:
只要是处理纯文本数据,用字符流比较好一点,处理其他数据的话还是用字节流吧。
小Demo
字符串生成文本
try {
File file = new File("F:\\看看这是啥.txt");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
bufferedWriter.write("shdjkf收到回复军扩所多或付付付付付付付付付付付付付付付付付付付付付付付付付付付付付付或或或或或哈所多或军卡");
bufferedWriter.flush();
bufferedWriter.close();
outputStreamWriter.close();
} catch (Exception e) {
e.printStackTrace();
}