java IO流:字节流、字符流
一、流的分类
1.操作数据的单位:字节流、字符流
2.数据的流向:输入流、输出流
3.流的角色:节点流、处理流
二、流的体系结构
抽象基类 | 节点流(文件流) | 缓冲流(属于处理流) |
InputStream | FileInputStream | BufferedInputStream |
OutputStream | FileOutputStream | BufferedOutputStream |
Reader | FileReader | BufferedReader |
Writer | FileWriter | BufferedWriter |
三、使用
1.FileReader和FileWriter的使用
读入:
//实例化File类的对象,指明要操作的文件FileReader fr = null;try {File file = new File("hello.txt");//将文件中的数据读入程序(内存)中//提供具体的流fr = new FileReader(file);//读入数据//read: 返回读入的字符 * @return The character read, or -1 if the end of the stream has been reached:返回-1时读完int data = fr.read();while(data!= -1){System.out.println((char) data);data = fr.read();}//关闭流} catch (IOException e) {e.printStackTrace();}finally {try {fr.close(); //一定要执行关闭操作,放在finally} catch (IOException e) {e.printStackTrace();}}
注:close()方法一定要放在finally里,避免出现异常不再执行finally中的关闭流操作,导致错误。
设置每次读取n个字节,遍历读取:
//一次读n个字符,使用read(cbuf)方法去读。
char[] cbuf = new char[3];
int len;//读到的数组里的元素个数
while ((len = fr.read(cbuf)) != -1) {//每次直接遍历取出cbuf的长度会导致重复读,应该遍历已经读到的数据,读到几个遍历几个for (int i = 0; i < len.length; i++) {System.out.println(cbuf[i]);}
}
写出:
写出时,对应的file是可以不存在的,在写出时会自动创建文件。如果file已存在,可以使用 new FileWriter(file,true)来设置为以下操作是对原来的文本进行追加。为false时,则为覆盖原来的文件并且重新写入。
try {File file = new File("hello1.txt");//提供FileWriter对象,用于数据的写出fw = new FileWriter(file);//写出fw.write("happy hello");
} catch (IOException e) {e.printStackTrace();
}finally {try {fw.close();}
}
写入+写出操作:
try {//创建file对象,指明读入写出的文件File dufile = new File("hello.txt");File xieFile = new File("hello2.txt");//创建输入流和输出流的对象fr = new FileReader(dufile);fw = new FileWriter(xieFile);//读入、写出数据char[] cbuf = new char[5];int len;//每次读到的字符的个数while( (len = fr.read(cbuf))!=-1){ //每次写入Len个字符fw.write(cbuf,0,len);}
}
2.FileInputStream和FileOutputStream
对于文本文件,使用字符流进行处理;对于非文本文件,使用字节流处理,字节流同时可对文本文件进行直接复制操作。
使用字节流FileInputStream处理非文本文件:
FileInputStream fis = null;FileOutputStream fos = null;try {File srcFile = new File("1.jpg");File destFile = new File("2.jpg");fis = new FileInputStream(srcFile);fos = new FileOutputStream(destFile);//字节流,操作字节byte[] buffer = new byte[5];int len;while( (len = fis.read(buffer))!=-1){fos.write(buffer,0,len);}} catch (IOException e) {e.printStackTrace();}finally {if(fos != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}if (fis!=null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}
可以据此写一个指定文件的复制,改成copyFile方法
可以看一下花费的时间,后面可与更高效率的缓冲流进行对比:
long start = System.currentTimeMillis();
copyFile("1.jpg","3.jpg");
long end = System.currentTimeMillis();
System.out.println("操作花费的时间为:"+(end - start)+"ms");
先写到这……后面再写
java IO流:字节流、字符流相关推荐
- java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类
目录 1.概念 2.常用的文件操作 2.1 创建文件 2.2 获取文件相关信息 2.3 目录的操作和文件删除 3. IO流原理及流的分类 3.1 流的分类 4.InputStream 字节输入流 4. ...
- IO流 序列化反序列化 Properties 缓冲流 字节流 字符流
package com.llb.io;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundE ...
- java io流过滤流_JAVA io流 文件流 字节流 字符流 过滤流 缓冲流
一.概念 1.1.按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 1.2.按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图 ...
- java网课|字节流字符流
理解一下i和o? i:input输入 o:output输出 流:数据,1字符=2字节,1字节=8个二进制位 输入与输出: 输入–硬盘中的数据读取到内存中使用 输出–内存中的数据写入到硬盘中存储 内存只 ...
- java之高级的IO流,字符流与字节流
IO流 今日内容介绍 标准输入流 & 转换流 & 打印流 对象操作流 Properties集合 第1章标准输入流 & 转换流 & 打印流 1.1标准输入输出 ...
- IO流 字符流 字节流 缓冲流 文件的复制
IO流 IO概述 IO流就是一个管道,是用来在设备之间传输数据 input:相对于内存/程序 往进走输入流 output:相对于内存/程序 往硬盘写入 分类 根据数据进出方式 1.输出流: FileW ...
- 01-21 IO流(字符流与字节流)
IO流(字符流与字节流) 今日内容介绍 标准输入流 & 转换流 & 打印流 对象操作流 Properties集合 第1章标准输入流 & 转换流 & 打印流 ...
- java基础练习复习二:递归字节流字符流二
本篇是基于java基础练习复习一:递归&字节流&字符流一, 如果对您有帮助 ,请多多支持.多少都是您的心意与支持,一分也是爱,再次感谢!!!打开支付宝首页搜"55672346 ...
- java byte char io流_吃透Java IO:字节流、字符流、缓冲流
前言有人曾问fastjson的作者(阿里技术专家高铁):"你开发fastjson,没得到什么好处,反而挨了骂背了锅,这种事情你为什么要做呢?" 高铁答道:"因为热爱本身, ...
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...
最新文章
- [微信小程序]单选框以及多选框实例代码附讲解
- matlab面向对象排序,matlab面向对象编程基础
- FFmpeg音频编码 ---- pcm转aac(使用新版ffmpeg API,亲测可用)
- 让LoadRunner再次走下神坛
- 模态对话框的消息循环原理及分析笔记
- (转)将cocos2dx项目从VS移植到Eclipse
- oracle堆,oracle被一堆insert和update堵死解决方案
- ffmpeg libx264_nginx+ffmpeg搭建流媒体服务器(直播流)
- Cesium多屏展示
- jde多目标_《和平精英》PEL职业联赛S3赛季:DKG战队获第四周周冠军,JDE“逆风翻盘”...
- grub2使用详解(官方手册)
- 如何单独编译Linux源代码中的驱动模块,比如NVMe驱动?
- CorelDRAW 里面如何将文字调整成半透明的颜色
- 用tar给linux .rar解压,Linux 下解压 rar 文件的方法
- 项目管理要分解目标,明确每个人的任务
- 数电篮球电子计分器设计
- glove.840B.300d glove词向量词嵌入文件国内服务器下载 出现麻烦阻塞的点时,就要思考google有没有更快捷的方法
- 一个很有意思的并查集详解
- 从技术角度告诉你,区块链到底有哪些特点和运作机制
- python for data analysis 操作usagov_bitly_data示例