图片流写出 并带数据_IO流阶段---字符流
字符流
当使用字节流读取文本文件时, 可能会有一个小问题, 就是当遇到中文字符时, 可能不会显示完整的字符, 那是因为一个中文字符可能占据多个字节存储, 所以Java提供一些字符流类, 以字符为单位读写数据, 专门用于处理文本文件.
1. 字符输入流 ( Reader
)
java.io.Reader
抽象类是表示用于读取字符流的所有类的超类, 可以读取字符信息到内存中, 它定义了字符输入流的基本共性功能方法. 如果要使用, 需要使用它的子类, 常用的子类是FileReader
| 修饰符 | 返回值 | 方法名 | 参数列表 | 作用 | | ------ | ------ | ------- | ------------ | ----------------------------------------------------- | | public | void | close
| ( ) | 关闭此流并释放与此流相关联的任何系统资源 | | public | int | read
| ( ) | 从输入流读取一个字符 | | public | int | read
| ( char[] c ) | 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 |
2. FileReader类
java.io.FileReader
类是读取字符文件的便利类, 构造是使用系统默认的字符编码和默认字节缓冲区.
- 字符编码 : 字符与字节的对应规则, windows系统的中文编码默认是GBK编码, idea中是UTF-8
- 字节缓冲区 : 一个字节数组, 用来临时储存字节数据
2.1 构造方法
| 构造方法 | 作用 | | ----------------------------- | ------------------------------------------------------ | | FileReader(File file)
| 参数要传递File类型的文件,表示从该文件中读取数据 | | FileReader(String fileName)
| 参数要传递字符串类型的文件路径,表示从该文件中读取数据 |
当创建一个流对象时, 必须传入一个文件路径, 类似于FileInputStream.
2.2 读取字符数据
| 修饰符 | 返回值 | 方法名 | 参数列表 | 作用 | | ------ | ------ | ------ | ------------ | ------------------------------------------------------------ | | public | void | read
| ( ) | 读取一个字符并返回, 如果已经读取结束, 返回值是-1 | | public | int | read
| ( char[] c ) | 将数据读取到字符数组中,并返回读取到的字符个数,如果已经读取结束, 返回值是-1 |
字符输入流的使用步骤 :
- 创建字符输入流对象
- 调用read方法, 读取数据
- 调用close方法, 释放资源
字符输入流一次读取一个字节的方法 :
public class Demo01Reader {public static void main(String[] args) throws IOException {//1. 创建字符输入流对象Reader r = new FileReader("day11source03.txt");//2. 调用read方法,读取数据。//int read(): 读取一个字符并返回, 如果已经读取结束, 返回值是-1.//定义变量i,用来接收读取到的字符。int i;//开始循环读取while ((i = r.read()) != -1) {//如果条件成立表示读取到了数据,读取到的数据保存在了变量i中System.out.print((char)i);}//释放资源r.close();}
}
字符输入流一次读取一个字符数组的方法 :
int read (char[] c)
: 将数据读取到字符数组中, 并返回读取到的字符个数, 如果已经读取结束, 返回值是-1
public class Demo02Reader {public static void main(String[] args) throws IOException {//创建字符输入流对象Reader r = new FileReader("day11source03.txt");//使用一次读取一个字符数组的方式读取数据。//int read(char[] cbuf): 将数据读取到字符数组中char[] cArr = new char[2];//定义变量len,用来接收读取到的字符个数int len;//开始循环读取while ((len = r.read(cArr)) != -1) {//如果条件成立表示读取到了数据,读取到的数据保存在了cArr这个数组中,变量len中保存的是读取到的字符个数。//将字符数组的一部分转成字符串输出。读取到了几个内容,就转几个。System.out.print(new String(cArr, 0, len));}//释放资源r.close();}
}
3. 字符输出流 ( Writer )
java.io.Writer
抽象类是所有字符输出流的顶层父类, 可以按照字符为单位写数据, 可以将Java程序中的数据写到文件中, 它定义了字节输出流的基本共性方法. 常用的子类是FileWriter.
| 修饰符 | 返回值 | 方法名 | 参数列表 | 作用 | | ---------------- | ------ | ------- | -------------------------------- | ------------------------------------------------------------ | | public abstract | void | close
| ( ) | 关闭此输出流并释放与此流相关联的任何系统资源。 | | public abstract | void | flush
| ( char[] c ) | 刷新此输出流并强制任何缓冲的输出字符被写出。 | | public | void | write
| ( int c ) | 写出一个字符 | | public | void | write
| ( char[] c ) | 将 b.length字符从指定的字符数组写出此输出流 | | public abstract | void | write
| (char[] c, int off, int length ) | 从指定的字符数组写出 len字符,从偏移量 off开始输出到此输出流 | | public | void | write
| (String str) | 写出一个字符串 | | public | void | write
| (String str, int off, int len) | 向文件中写字符串的一部分。参数off表示从哪个位置开始写,参数len表示写几个 |
4. FileWriter类
java.io.FileWriter
类是写出字符到文件的便利类, 构造时使用系统默认的字符编码和默认字节缓冲区.
4.1 构造方法
| 构造方法 | 作用 | | ----------------------------- | -------------------------------------------------------- | | FileWriter(File file)
| 参数要传递一个File类型的文件,表示向该文件中写数据 | | FileWriter(String fileName)
| 参数要传递一个字符串类型的文件路径,表示向该文件中写数据 |
当创建一个流对象时, 必须传入一个文件路径, 类似于FileOutputStream
4.2 写出数据
字符输出流的使用步骤 :
- 创建字符输出流对象
- 调用write方法写数据
- 刷新
- 关流
只有字符输出流必须要勤刷新.
public class Demo01Writer {public static void main(String[] args) throws IOException {//1. 创建字符输出流对象。Writer w = new FileWriter("day11file01.txt");//2. 调用write方法写数据w.write("雷猴");//字符输出流写数据并没有将数据直接写到文件中,而是先写到了内存缓冲区中。//如果想要把内存缓冲区中的数据放到文件中,那么需要刷新。//3. 刷新w.flush();//4. 关流w.close();}
}
刷新方法和关闭方法的区别flush():
刷新。 流在刷新之后还可以使用。
close():先刷新,然后关闭流。 流在关闭之后就不能使用了。
调用close的时候, 也会先刷新, 再关闭, 但是如果要写入很多的数据, 那么内存缓冲区就会过载 , 所以需要时不时的清空内存缓冲区, 将数据先写入文档内在继续.
5种字符输出的方法 :
public class Demo03Writer {public static void main(String[] args) throws IOException {//创建字符输出流对象Writer w = new FileWriter("day11file03.txt");//调用write方法写数据。//void write(String str): 向文件中写一个字符串//w.write("hello");//void write(String str, int off, int len): 向文件中写字符串的一部分//w.write("hello", 1, 3);//将hello的一部分写到文件中,从索引为1的位置开始写,写3个//void write(int c):向文件中写一个字符//w.write(100);//d 会查询ASCII码表写入对应的字符。//w.write('a');//w.write('中');//void write(char[] cbuf): 向文件中写一个字符数组。//char[] cArr = {'h', 'e', 'l', 'l', 'o'};//w.write(cArr);//void write(char[] cbuf, int off, int len): 向文件中写字符数组的一部分char[] cArr = {'h', 'e', 'l', 'l', 'o'};w.write(cArr, 1, 3);//表示将cArr的一部分写到文件中,从索引为1的位置开始写,写3个//刷新w.flush();//关流w.close();}
}
图片流写出 并带数据_IO流阶段---字符流相关推荐
- 图片流写出 并带数据_第九章 IO流
1. 输入流和输出流联系和区别,节点流和处理流联系和区别 首先,你要明白什么是"流".直观地讲,流就像管道一样,在程序和文件之间,输入输出的方向是针对程序而言,向程序中读入东西,就 ...
- 学生的基本信息包括学号、姓名、成绩, 写出表示学生数据的结构类型,编写一个程序,输入整数n,再输入n个学生的信息,输出成绩最高的学生信息。
学生的基本信息包括学号.姓名.成绩, 写出表示学生数据的结构类型,编写一个程序,输入整数n,再输入n个学生的信息,输出成绩最高的学生信息. 代码如下: #include<stdio.h>s ...
- java基础学习_IO流03_字符流、IO流小结、案例_day21总结
java基础学习_IO流03_字符流.IO流小结.案例_day21总结 ================================================================ ...
- Java18-day09【字节缓冲流、字符流、编码表、字符串与字符流中的编码解码问题、字符流读写数据的方式、字符缓冲流、IO流小结】
视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:zjxs] Java基础--学习笔记(零起点打开java ...
- 【Java-IO】File、搜索删除剪切、字符集、字符编码、字节流、将内存中的数据写入文件、字符流、缓冲流、Scanner、格式化输出、数据流、对象流、序列化与反序列化、Files工具类
IO 文章目录 IO 简介 File 分隔符.大小写 常用方法 练习:搜索.删除.剪切 字符集(Character Set) 字符编码(Character Encoding) 字符编码比较 乱码 字节 ...
- java---编写一个程序,分别使用字节流和字符流拷贝一个文本文件。
题目: 编写一个程序,分别使用字节流和字符流拷贝一个文本文件.要求如下: (1)使用FileInputStream.FileOutputStream和FileReader.FileWriter分别进行 ...
- 一文带你看懂JAVA IO流,史上最全面的IO教学啦(附送JAVA IO脑图
一.IO流是什么 惯例引用百科的回答 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操 ...
- 使用layui在前端接收后端的图片流来显示二维码,在前端使用iframe接收后端流来预览pdf
消息弹框的形式 因为我是在生成二维码之后,用zxing的工具类输出的流 所以这里介绍一下我用到的工具类的依赖 gradle // https://mvnrepository.com/artifact/ ...
- 运筹学修炼日记:如何优雅地写出大规模线性规划的对偶
运筹学修炼日记:如何优雅地写出大规模线性规划的对偶问题 运筹学修炼日记:如何优雅地写出大规模线性规划的对偶 最短路问题 多商品流问题`Multicommodity Network Flow Probl ...
最新文章
- Nginx反向代理负载均衡时,验证码不正确
- 香港虚拟主机怎么转服务器,香港虚拟主机好慢怎么办
- .net core webapi 前后端开发分离后的配置和部署
- flare3d_clone
- vscode 使用 ssh 登录
- python中string.digits_Python string.hexdigits方法代码示例
- mysql—数据库优化——如何选择合适的索引
- dismiss 多个viewController
- Linux chapter 8
- atitit 图像处理机器视觉专业博硕连读课程表.xlsx
- TBS 腾讯浏览服务(X5WebView) 集成指南
- 消费券或可让消费增速超过8%
- 【Excel】根据空格拆分单元格
- 海贼王python代码_这顶海贼王的帽子,我Python给你带上了 | 【人脸识别应用】
- JavaFX教程资源
- html没有注册类,电脑提示没有注册类别的解决方法大全
- 一文带你了解c++使用endl和使用‘\n‘的区别
- 2022跨年烟花代码
- oracle nvl和nvl2的区别
- android手机密码忘了,安卓手机密码忘记了怎么解锁