IO流——字节流、字符流
在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。
流的分类
① 流按其流向分为“输入流”和“输出流”。
② 流按数据传输单位分为“字节流”和“字符流”。
a) “字节流”用来读写8位二进制的字节。
b)“字符流”用来读写16位二进制字符。
③ 流按功能分为“节点流”和“过滤流”。
a) “节点流”用于直接操作目标设备的流。例如:磁盘或一块内存区域。
b) “过滤流”是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。
一、字节流
1、字节输出流OutputStream
OutputStream此抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节,定义了输出字节流的基本共性功能方法。
输出流中定义都是写write方法:
write(byte[] b,int off,int len)方法,b表示要写入的字符数组,off表示开始写入的数组下标,len表示写入长度
1.1、FileOutputStream类、文件输出流
FileOutputStream是OutputStream的子类,可用来写入数据到文件。
构造方法:
可直接创建一个File类,也可创建String字符串,文件路径
例:
//需求:将数据写入到文件中。 public static void main(String[] args) throws IOException { //创建存储数据的文件。File file = new File("c:\\file.txt");//创建一个用于操作文件的字节输出流对象。一创建就必须明确数据存储目的地。//输出流目的是文件,文件不存在,会自动创建。如果文件存在,则覆盖。FileOutputStream fos = new FileOutputStream(file);//填入字符串地址//FileOutputStream fos = new FileOutputStream("c:\\file.txt");//调用父类中的write方法。 //字符串String 的getBytes()方法,将字符串转换成字符数组byte[] data = "abcde".getBytes();fos.write(data);//关闭流资源。 fos.close();}
1.2、给文件中续写和换行
当我们直接new FileOutputStream(file)这样创建对象,写入数据时,会覆盖原有的文件,
如果我们只想在原有文件中续写呢?
FileOutputStream的另一构造方法:
在创建对象时,在后面加一个布尔值append,当为true时,会在文件末尾继续添加
换行符:"\r\n"
在要写入的字符串前后加入换行符,文件内会换行
例:
public static void main(String[] args) throws Exception { //明确目标文件File file = new File("c:\\file.txt");FileOutputStream fos = new FileOutputStream(file, true); //在"aaa"前添加换行符String str = "\r\n"+"aaa";fos.write(str.getBytes()); //关闭资源流 fos.close();}
1.3、IO的异常处理
在实际开发中,io异常的处理
public class IODemo {public static void main(String[] args) {FileOutputStream fos=null;try{//明确目标文件fos=new FileOutputStream("e:\\test\\demo.txt");//写入字符fos.write(100);}catch(IOException ex){ex.printStackTrace();throw new RuntimeException("文件写入失败");}finally{//关闭资源,全部放在finally中try {if(fos!=null)//关闭资源流异常处理 fos.close();} catch (IOException e) {e.printStackTrace();throw new RuntimeException("文件写入失败");}} } }
2、字节输入流 InputStream
InputStream此抽象类,是表示字节输入流的所有类的超类。,定义了字节输入流的基本共性功能方法。
定义了字节输入流的基本共性功能方法。
read():读取一个字节并返回,没有字节返回-1.
read(byte[]): 读取一定量的字节数,并存储到字节数组中,返回读取到的字节数。
2.1 、FileInputStream类
FileInputStream是InputStream的子类,可用来读取文件内容。
其构造方法:
2.2、FileInputStream类读取数据read方法
在读取文件中的数据时,调用read方法,实现从文件中读取数据
例:
public static void main(String[] args) throws IOException {//明确读取文件//创建一个字节输入流对象,必须明确数据源,其实就是创建字节读取流和数据源相关联。 FileInputStream fis=new FileInputStream("e:\\test\\test.txt"); //读取数据。使用 read();一次读一个字节。/*int a=fis.read(); //(char),强制转换为字符类型//不转换类型,输出为int类型,ASCii表System.out.println((char)a);int b=fis.read(); System.out.println((char)b);int c=fis.read(); System.out.println((char)c);int d=fis.read(); System.out.println((char)d); int e=fis.read(); System.out.println((char)e); int f=fis.read(); System.out.println((char)f); System.out.println(a+b+c+d+e+f);*/int len=0; //循环读取,读取前判断fis.read()是否为-1while((len=fis.read())!=-1){ System.out.println((char)len); } fis.close(); }
2.3读取数据 read( byte [ ] ) 方法
在读取文件中的数据时,调用read方法,每次只能读取一个,太麻烦了,于是我们可以定义数组作为临时的存储容器,这时可以调用重载的read方法,一次可以读取多个字符。
一般定义数组的长度为1024的倍数
public static void main(String[] args) throws IOException /** 演示第二个读取方法, read(byte[]);*/File file = new File("c:\\file.txt");// 创建一个字节输入流对象,必须明确数据源,其实就是创建字节读取流和数据源相关联。FileInputStream fis = new FileInputStream(file); //创建一个字节数组。byte[] buf = new byte[1024];//长度可以定义成1024的整数倍。 int len = 0;while((len=fis.read(buf))!=-1){System.out.println(new String(buf,0,len));}fis.close();}
2.4字节流练习
需求:复制文件
原理;读取一个已有的数据,并将这些读到的数据写入到另一个文件中。
public static void main(String[] args) throws IOException {//明确数据源FileInputStream fis=new FileInputStream("e:\\sqlyog_x64.zip");//明确目的地FileOutputStream fos=new FileOutputStream("e:\\test\\sqlyog_x64.zip");//复制int len=0;while((len=fis.read())!=-1){//写入目标文件 fos.write(len);}//释放资源 fis.close();fos.close();}
二、字符流
字节流可以针对英文、数字进行读写操作,当我们操作的文件中有中文字符时,就需要用到字符流。
1、用字节流处理字符的问题
public static void main(String[] args) throws IOException {//给文件中写中文 writeCNText();//读取文件中的中文 readCNText();} //写中文public static void writeCNText() throws IOException {FileOutputStream fos = new FileOutputStream("c:\\cn.txt"); //写入中文字符fos.write("欢迎你".getBytes());fos.close();}//读取中文public static void readCNText() throws IOException {FileInputStream fis = new FileInputStream("c:\\cn.txt");int ch = 0; //读取中文字符while((ch = fis.read())!=-1){System.out.println(ch);}}
利用字节流操作复制文件后,得到的文件中并没有具体文字,看到的只是数字。
2、字符编码表
计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。
编码表:其实就是生活中字符和计算机二进制的对应关系表。
3、 字符输入流Reader
读取字符流的抽象超类。用法类似字节流的字节输入流 InputStream
read():读取单个字符并返回int,结束后返回-1
read(char[]):将数据读取到数组中,并返回读取的个数。
3.1 FileReader类
用来读取字符文件的便捷类。
构造方法
4 字符输出流Writer
Writer是写入字符流的抽象类,用法类似字节流的字节输出流 OutputStream
4.1 FileWriter类
用来写入字符文件的便捷类
构造方法:
5、字符流练习
需求:复制文本文件。
public static void main(String[] args) throws IOException {copyTextFile();}public static void copyTextFile() throws IOException {//1,明确源和目的。FileReader fr = new FileReader("c:\\cn.txt");FileWriter fw = new FileWriter("c:\\copy.txt");//2,为了提高效率。自定义缓冲区数组。字符数组。char[] buf = new char[1024];int len = 0;while((len=fr.read(buf))!=-1){fw.write(buf,0,len);}/*2,循环读写操作。效率低。int ch = 0;while((ch=fr.read())!=-1){fw.write(ch);}*///3,关闭资源。 fw.close();fr.close();}
6、 flush()和close()的区别?
在执行完读取写入操作后,字符并没有马上存入目标文档,字符内容暂存在缓存区,需要用flush(),刷新一下,刷新后,流还可以继续使用。
close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以使用。
如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭。
转载于:https://www.cnblogs.com/dk2557/p/9512440.html
IO流——字节流、字符流相关推荐
- java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类
目录 1.概念 2.常用的文件操作 2.1 创建文件 2.2 获取文件相关信息 2.3 目录的操作和文件删除 3. IO流原理及流的分类 3.1 流的分类 4.InputStream 字节输入流 4. ...
- java io流过滤流_JAVA io流 文件流 字节流 字符流 过滤流 缓冲流
一.概念 1.1.按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 1.2.按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图 ...
- IO流 序列化反序列化 Properties 缓冲流 字节流 字符流
package com.llb.io;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundE ...
- IO流 字符流 字节流 缓冲流 文件的复制
IO流 IO概述 IO流就是一个管道,是用来在设备之间传输数据 input:相对于内存/程序 往进走输入流 output:相对于内存/程序 往硬盘写入 分类 根据数据进出方式 1.输出流: FileW ...
- io包下 文件类 字节流 字符流 缓冲流 转换流 序列化流 打印流
第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.2 构造方法 public File(String pat ...
- -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流...
File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) •p ...
- IO流1(字节流+字符流+输入流+输出流+节点流+处理流)
一(IO流简介) 大多数应用程序都需要实现与设备间的数据传输,如键盘输入数据.显示器显示程序运行的结果等.在Java中,将这种通过不同输入输出设备之间的数据传输抽象表述为"流",程 ...
- 01-21 IO流(字符流与字节流)
IO流(字符流与字节流) 今日内容介绍 标准输入流 & 转换流 & 打印流 对象操作流 Properties集合 第1章标准输入流 & 转换流 & 打印流 ...
- java之高级的IO流,字符流与字节流
IO流 今日内容介绍 标准输入流 & 转换流 & 打印流 对象操作流 Properties集合 第1章标准输入流 & 转换流 & 打印流 1.1标准输入输出 ...
- 字节流字符流IO资源处理PropertiesResourceBundle
字节流&字符流&IO资源处理&Properties&ResourceBundle - 能够使用字节输入流读取数据到程序//1.创建FileInputStream对象,构 ...
最新文章
- 第八章 让开发板发出声音:蜂鸣器驱动读后感
- 在使用postman中操作api接口测试403解决方法
- Qt文档阅读笔记-官方2D Painting Example实例解析
- c语言流感,维生素C能防流感?专家:或减轻普通感冒引起不适症状
- 金陵科技学院计算机答辩,金陵科技学院优秀毕业论文答辩ppt模板
- hibernate 继承映射(二)
- 约瑟夫环数学公式求解
- 使用tcl 创建vivado工程
- TFS dataserver故障测试
- itlwm驱动_黑苹果系统 macOS 驱动英特尔无线网卡的小教程
- 经典6位半HP34401A电路图
- pdf关键字高亮 java_Java PDF查找和高亮文本-Go语言中文社区
- Lambda拉姆达表达式
- SqlServer使用top 100 PERCENT 无法排序的问题
- [整理] 如何学习插画,美术等
- 海思HI35xx平台软件开发快速入门之H264解码实例
- c语言数字的写法田字格,正确书写数字1-10的方法,实用!
- 学习 CommandName 和 CommandArgument
- Latex修改字体颜色,首行不空格/不缩进
- C语言数据结构练习——停车场管理系统(使用栈和队列)(草稿的草稿)
热门文章
- mysql索引下推原理_mysql的索引下推理解和实践
- 安全厂商安全技术工程师(校招)——技术要求
- 深度的卷积神经网络CNN(MNIST数据集示例)
- WPF窗体隐藏鼠标光标的方法
- mysql-5.6.40 源码安装(Centos6.6)
- 部署前端项目 Linux系统的nginx配置
- D3.js中国地图下钻
- 《精解Windows8》——1.2 告别开始按钮进入“开始”屏幕时代
- linux终奌站 信息 格式 更改 /etc/bashrc
- js判断复选框是否被选中