输入输出流IO
来源:互联网 发布:大非农数据一定准确吗 编辑:程序博客网 时间:2024/06/07 20:45
File
表示一个与硬盘上的文件联系
File表示一个联系,文件可能存在,也可能不存在
File有可能是一个文件,也有可能是一个文件夹
输入输出流IO
- 流
- 数据在内存和数据源间流动,包括硬盘文件 数据库和网络等
- 操作的数据单元
- 字节流操作8位
- 字符流操作16位
- 节点流和处理流
- 从一个特定的I/O设备读取数据的流,为节点流
- 将一个已存在的节点流进行连接,或则封装,为处理流,使用装饰器设计模式
- 节点流位于IO操作的一线,所有操作必须由它们完成
- 处理流可以对其他流进行处理,主要时增强 提升性能的,本身不具备直接操作节点的能力。
- 性能提高:增加缓存的方式提高性能
- 操作的便捷:提供一系列便捷的方法来一次输入输出大量内容
输入流
- InputStream和Reader
- InputStream 和 Reader 是所有输入流的基类,它们是两个抽象类,是所有输入流的模版
- inputStream读取一个字节,Reeader读取一个字符
- 创建输入流时,需要借助其实现子类
- FileInputStream和FileReader
- 它们都是节点流,直接和指定文件关联
- FileInputStream;读取的字节数,若到达文件尾部,返回-1;在输入可用之前,方法会阻塞
- read():读取一个字节数据
- read(byte[] b):读取流数据放入byte数组内
- read(byte[] b,int start,int len):读取数据大byte数组内,起始位置为start,其长度为len
- 缓存流BufferedInputStream和 BufferedReader
- 缓存提高性能
- 构造器使用InputStream和Reader
- 转换流:InputStreamReader
- 将字节流转为字符流,处理乱码(编码集、解码集)
- 构造器中传入InoutStream,返回Reader
- 可指定字符集
- 字节数组输入流ByteArrayInputStream
- 将字节数组输出流的缓存字节数组读入输入流中
- 由垃圾回收机制管理,不需要手动关闭。此流被关闭后,仍可调用,不会产生异常
- 数据处理流:DataInputStream
- 可以处理基本类型+String,保留数据的类型。前提是读取顺序与写出顺序一致,否则读
取数据不正确 - 读取基本数据到输入流中
- 可以处理基本类型+String,保留数据的类型。前提是读取顺序与写出顺序一致,否则读
- 对象处理流:反序列化ObjectInputStream
- 将已序列化的对象的文件读取进输入流,由输入流创建原始的对象
- readObject()读取对象
输出流
文件续写和换行
- 在输出流的构造器中加入boolean append参数,实现续写功能
- 换行可在字符串中加入:”\r\n”
- BufferedWriter的newLine()方法,写入换行符
OutputStream 和 Writer
将流内的数据写出
FileOutputStream
- write()写入输出流
FileWriter
- append(char):将字符加入输出流
- wirte():写入输出流
缓冲处理流:BufferedOutputStream 和 BufferedWriter
- 缓存,提高性能
转换处理流:OutputStreamWriter
- 将字符流转换成字节流
- 构造器传入字符流,返回字节流
- 可指定字符集
字节数组节点类: ByteArrayOutputStream
- 创建一个字符数组缓存用,所有内容写入到此字节数组中,获取用toByteArray和toString方法
- 不用关闭,垃圾回收机制;关闭后依然可以使用
数据处理流:DataOutputStream
- 将数据内容及类型持久化到存储介质中,这里的类型为基本类型和字符串
对象处理流(序列化):ObjectOutputStream
- 序列化需要对象实现serializable接口
- 不想序列化的属性用transient修饰
IO流
输入流与输出流的桥梁是字节数组,输入流从数据源读取数据到输入流,然后read()方法读入字节数组
输出流利用资格字节数组写入输出流,存入相应IO设备等处
字节流
FileInputStream 操作文件的字节输入流
BufferedInputStream 高效的字节输入流
ObjectInputStream 反序列化流
字节输出流 OutputStream
FileOutputStream 操作文件的字节输出流
BufferedOutputStream 高效的字节输出流
ObjectOuputStream 序列化流
PrintStream 字节打印流
字符流
字符输入流 Reader
FileReader 操作文件的字符输入流
BufferedReader 高效的字符输入流
InputStreamReader 输入操作的转换流(把字节流封装成字符流)
字符输出流 Writer
FileWriter 操作文件的字符输出流
BufferedWriter 高效的字符输出流
OutputStreamWriter 输出操作的转换流(把字节流封装成字符流)
PrintWriter 字符打印流
方法:
读数据方法:
read() 一次读一个字节或字符的方法
read(byte[] char[]) 一次读一个数组数据的方法
readLine() 一次读一行字符串的方法(BufferedReader 类特有方法)
readObject() 从流中读取对象(ObjectInputStream 特有方法)
写数据方法:
write(int) 一次写一个字节或字符到文件中
write(byte[] char[]) 一次写一个数组数据到文件中
write(String) 一次写一个字符串内容到文件中
writeObject(Object ) 写对象到流中(ObjectOutputStream 类特有方法)
newLine() 写一个换行符号(BufferedWriter 类特有方法)
IO流异常处理
- 出现异常:先try。。。catch下,然后在finally处理关闭,关闭出问题,上抛异常
- 许多在finally里关闭的资源,因为怕关闭时出异常,一般都这么处理
finally {//一定要判断 fos 是否为 null,只有不为 null 时,才可以关闭资源if (fos != null) {try {fos.close();} catch (IOException e) {throw new RuntimeException("");}}
commons-IO
- FilenameUtils
- getExtension(String path):获取文件的扩展名
- getName():获取文件名
- isExtension(String fileName,String ext):判断 fileName 是否是 ext 后缀名
- FileUtils
- readFileToString(File file):读取文件内容,并返回一个 String
- writeStringToFile(File file,String content):将内容 content 写入到 file 中
- copyDirectoryToDirectory(File srcDir,File destDir);文件夹复制
- copyFile(File srcFile,File destFile);文件复制
- IO输入输出流
- IO输入输出流
- Java IO输入输出流
- 输入输出IO流
- java13-IO输入输出流
- IO输入输出流-2
- IO输入输出流-3
- java io 输入输出流
- IO流--输入输出
- IO(输入输出流)
- IO序列输入输出流
- IO输入输出流
- IO-输入输出流
- Java IO(输入输出流)
- Java输入输出流IO
- IO输入输出流
- JAVA-IO输入输出流
- IO输入输出流
- shader-school的渲染入门系列(二)
- SpringMVC数据绑定四(list、set和map)
- 第4章 JAVA基础3
- selenium实战二:登入QQ空间
- 我的电路实践
- 输入输出流IO
- ElasticSearch之term vector
- spring+mybatis+WebService发布webservice接口
- 第六单元作业
- 装载问题
- linux内核结构完整视图
- iOS开发,初探离屏渲染
- WebSocket获取httpSession空指针异常的解决办法
- 在虚拟机中安装CentOS7