IO流之过滤流介绍:
过滤流:
IO流按功能分类可以分为节点流和过滤流,节点流是用来直接操作目标设备的流,比如我们前面介绍的FileReader、FileWriter、FileInputStream、FileOutputStream,而过滤流是对应已存在的流进行包装,以提供更强大和灵活的读写功能。
转换流:
将字节流和字符流进行相互转换的高级流:
InputStreamReader :将字节输入流转换为字符输入流
OutputStreamWriter:将字节输出流转换成字符输出流
public class OutputStreamWriter extends Writerpublic OutputStreamWriter(OutputStream out) {super(out);try {//设定编码的过程
se = StreamEncoder.forOutputStreamWriter(out, this, (String)null);} catch (UnsupportedEncodingException e) {throw new Error(e);}}
通过研究FileReader的实现
public class FileReader extends InputStreamReader {public FileReader(String fileName) throws FileNotFoundException {super(new FileInputStream(fileName));}
FileReader实现是继承自InputStreamReader转换流,转换流的构造使用到FileInputStream字节输入流,FileReader的实现是将读取到的字节流通过转换流(本质是通过编码器将字节按照对应的编码表:ASCII、GBK、UTF-8)将其解析为我们能够识别的文本内容
缓冲流:
提高IO的读取速度
字节缓冲流:BufferInputStream、BufferOutputStream
字符缓冲流:BufferReader、BufferWriter
public BufferedReader(Reader in, int sz) {//需要传入一个Reader对象,sz是缓冲容量默认为:defaultCharBufferSize = 8192;super(in);if (sz <= 0)throw new IllegalArgumentException("Buffer size <= 0");this.in = in;cb = new char[sz];nextChar = nChars = 0;}
特有方法:
BufferWriter
void newLine() throws IOException ;根据当前系统,写入一个换行符
BufferReader
String readLine() throws IOException //读取文本中一行内容
RandomAccessFile:
RandomAccessFile既可以读取文件内容,也可以向文件输出数据。同时,RandomAccessFile支持“随机访问”的方式,程序也可以直接跳转到文件的任意地方来读写数据。
RandomAccessFile的构造函数
mode:指定RandomAccessFile的访问模式,一共有4种模式。
**"r" : ** 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
"rw": 打开以便读取和写入。
"rws": 打开以便读取和写入。相对于 "rw","rws" 还要求对“文件的内容”或“元数据”的每个更新都同步写入到基础存储设备。
"rwd" : 打开以便读取和写入,相对于 "rw","rwd" 还要求对“文件的内容”的每个更新都同步写入到基础存储设备。
public RandomAccessFile(String name, String mode)throws FileNotFoundException{this(name != null ? new File(name) : null, mode);}
public RandomAccessFile(File file, String mode)throws FileNotFoundException//抛出IO异常{this(file, mode, false);}private RandomAccessFile(File file, String mode, boolean openAndDelete)throws FileNotFoundException{String name = (file != null ? file.getPath() : null);int imode = -1;if (mode.equals("r"))imode = O_RDONLY;else if (mode.startsWith("rw")) {imode = O_RDWR;rw = true;if (mode.length() > 2) {if (mode.equals("rws"))imode |= O_SYNC;else if (mode.equals("rwd"))imode |= O_DSYNC;elseimode = -1;}}if (openAndDelete)imode |= O_TEMPORARY;if (imode < 0)throw new IllegalArgumentException("Illegal mode \"" + mode+ "\" must be one of "+ "\"r\", \"rw\", \"rws\","+ " or \"rwd\"");SecurityManager security = System.getSecurityManager();if (security != null) {security.checkRead(name);if (rw) {security.checkWrite(name);}}if (name == null) {throw new NullPointerException();}if (file.isInvalid()) {throw new FileNotFoundException("Invalid file path");}fd = new FileDescriptor();fd.attach(this);path = name;open(name, imode);FileCleanable.register(fd); // open sets the fd, register the cleanup}
RandomAccessFile的特有方法:
long getFilePointer( ):返回文件记录指针的当前位置
void seek(long pos ):将文件指针定位到pos位置
RandomAccessFile练习:
在指定文件的指定位置插入指定数据:
public static void indexAdd(String puth,Long index,String date) throws IOException {File file = new File(puth);if(!file.exists()){throw new IOException();}RandomAccessFile accessFile = null;FileOutputStream stream =null;FileInputStream stream1 = null;try {accessFile = new RandomAccessFile(file,"rw");accessFile.seek(index);stream = new FileOutputStream(file.getParent()+ File.separator + "tmp.txt",true);byte[] bytes = new byte[100];int i ;while ((i=accessFile.read(bytes))!= -1){stream.write(bytes,0,i);}accessFile.seek(index);accessFile.writeUTF(date);stream1 = new FileInputStream(file.getParent() + File.separator + "tmp.txt");while ((i=stream1.read(bytes))!= -1){accessFile.write(bytes,0,i);}new File(file.getParent() + File.separator + "tmp.txt").deleteOnExit();}catch (Exception e){e.printStackTrace();}finally {if (accessFile !=null) accessFile.close();if (stream!=null) stream.close();if (stream1!=null) stream1.close();}}
IO流之过滤流介绍:相关推荐
- JAVA I/O流 字符流和字节流、节点流和处理流(包装流、过滤流)、缓冲流
JAVA IO流 一.相关概念 1.分类: 区别和联系 代码 嵌套的IO流关闭的问题 一.相关概念 I/O流: Input/Output Stream,文件输入输出流. 1.分类: 输入流 和 输出流 ...
- Java I/O流(File、字节流、字符流、过滤流、对象流)详解
File以及I/O流 一.File类的使用 java.io.File类 代表硬盘上的一个文件或者目录 java.io.File类作用: 每个File类的对象表示一个磁盘文件或目录,其对象属性中包含了文 ...
- java字符流的父类_Java基于代码实战的字符流父类、字符转换流、缓冲字符流、过滤流...
1. Java输入输出(I/O)流的知识回顾: 补充:因为这篇文章是基于上一篇的延续,因此将上一篇进行简单的回顾,以便理解本节内容. 1)输入输出(I/O)流分类:共分为字节型输入输出流和字符型输入输 ...
- java io流过滤流_JAVA io流 文件流 字节流 字符流 过滤流 缓冲流
一.概念 1.1.按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 1.2.按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图 ...
- stream流去除对象的值_I/O流(过滤流、对象序列化、字符流)
过滤流基础 Data Stream 首先我们来介绍一对过滤流:DataInputStream 和 DataOutputStream.这两个类有什么作用呢?首先来思考下面的需求:假设,要把一个 doub ...
- java printwriter实例_PrintWriter做过滤流+FileWriter案例分析
package com.mstf.ui; import java.io.*; public class TestWriter { public static void main(String args ...
- java中过滤流_第十四讲 Java中的字节流和过滤流
第十四讲Java中的字节流和过滤流 主要内容 InputStream和FileInputStream OutputStream和FileOutputStream 文件字节IO流应用举例 过滤流类和常用 ...
- Java IO流 - 缓冲流的详细使用介绍
文章目录 缓冲流 缓冲流概述 字节缓冲流 字符缓存流 缓冲流 缓冲流概述 缓冲流介绍: 缓冲流也称为高效流.或者高级流.之前学习的字节流和字符流可以称为原始流. 作用:缓冲流自带缓冲区.可以提高原始字 ...
- java基础学习_IO流03_字符流、IO流小结、案例_day21总结
java基础学习_IO流03_字符流.IO流小结.案例_day21总结 ================================================================ ...
最新文章
- Hyper-V Server 2008系统管理实战
- mysql异机还原_利用RMAN进行异机还原(目录相同)
- python必备基础代码-Python初学者必会的3款代码编辑器
- APC UPS 网络管理卡(型号apc ap9631)的配置
- 吴恩达机器学习笔记七_应用机器学习的建议
- 汇编语言8086笔记
- 智慧职教云答案在哪里找_云课堂智慧职教答案哪里找?
- 访问oracle索引需要什么权限,Oracle索引 权限
- 映美精LoadDeviceStateFromFile问题
- 防火墙OPNsense安装
- 编程吸金榜:你排第几?网友神回应了 !
- Pytorch下基于lstm的股价预测
- CentOS 配置 NodeBB
- 华为魔术2手机拆机图解_荣耀Magic2做工如何?荣耀Magic2拆解图解评测 (全文)
- 『数据分析』使用python进行同期群分析
- matlab 毕业答辩,MATLAB的答辩.ppt
- 中国真空退火炉行业市场供需与战略研究报告
- 林大OJ--2031 凯撒密码
- 10个SEO 写作的必读小技巧!包你读完写更好创作
- ansible软件下载
热门文章
- 转:ESRI矢量数据格式简介
- 位运算模块mBit.bas
- BZOJ 1084: [SCOI2005]最大子矩阵
- Linux操作命令(四)
- XtraBackup出现 Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
- 探寻新的治疗方法,研究人员用VR可视化DNA结构
- BZOJ 4174 tty的求助 莫比乌斯反演
- iOS 组件化 —— 路由设计思路分析
- Verlet-js JavaScript 物理引擎
- MVC 自定义IModelBinder实现json参数转Dictionarystring, string