Java字符流的使用

字符输入流

Reader 类是所有字符流输入类的父类,该类定义了许多方法,这些方法对所有子类都是有效的。

Reader 类的常用子类如下。

	CharArrayReader 类:将字符数组转换为字符输入流,从中读取字符。StringReader 类:将字符串转换为字符输入流,从中读取字符。BufferedReader 类:为其他字符输入流提供读缓冲区。PipedReader 类:连接到一个 PipedWriter。InputStreamReader 类:将字节输入流转换为字符输入流,可以指定字符编码。

与 InputStream 类相同,在 Reader 类中也包含 close()、mark()、skip() 和 reset() 等方法,这些方法可以参考 InputStream 类的方法。

Reader类中的read()方法

方法名及返回值类型说明
int read()从输入流中读取一个字符,并把它转换为 0~65535 的整数。如果返回 -1, 则表示已经到了输入流的末尾。为了提高 I/O 操作的效率,建议尽量使用下面两种 read()方法
int read(char[] cbuf)从输入流中读取若干个字符,并把它们保存到参数 cbuf 指定的字符数组中。 该方法返回读取的字符数,如果返回 -1,则表示已经到了输入流的末尾
int read(char[] cbuf,int off,int len)从输入流中读取若干个字符,并把它们保存到参数 cbuf 指定的字符数组中。其中,off 指定在字符数组中开始保存数据的起始下标,len 指定读取的字符数。该方法返回实际读取的字符数,如果返回 -1,则表示已经到了输入流的末尾

字符输出流

与 Reader 类相反,Writer 类是所有字符输出流的父类,该类中有许多方法,这些方法对继承该类的所有子类都是有效的。

Writer 类的常用子类如下。

	CharArrayWriter 类:向内存缓冲区的字符数组写数据。StringWriter 类:向内存缓冲区的字符串(StringBuffer)写数据。BufferedWriter 类:为其他字符输出流提供写缓冲区。PipedWriter 类:连接到一个 PipedReader。OutputStreamReader 类:将字节输出流转换为字符输出流,可以指定字符编码。

与 OutputStream 类相同,Writer 类也包含 close()、flush() 等方法,这些方法可以参考 OutputStream 类的方法。

Writer类中的write()方法和append()方法

方法名及返回值类型说明
void write(int c)向输出流中写入一个字符
void write(char[] cbuf)把参数 cbuf 指定的字符数组中的所有字符写到输出流中
void write(char[] cbuf,int off,int len)把参数 cbuf 指定的字符数组中的若干字符写到输出流中。其中,off 指定字符数组中的起始下标,len 表示元素个数
void write(String str)向输出流中写入一个字符串
void write(String str, int off,int len)向输出流中写入一个字符串中的部分字符。其中,off 指定字符串中的起始偏移量,len 表示字符个数
append(char c)将参数 c 指定的字符添加到输出流中
append(charSequence esq)将参数 esq 指定的字符序列添加到输出流中
append(charSequence esq,int start,int end)将参数 esq 指定的字符序列的子序列添加到输出流中。其中,start 指定子序列的第一个字符的索引,end 指定子序列中最后一个字符后面的字符的索引,也就是说子序列的内容包含 start 索引处的字符,但不包括 end索引处的字符

注意:Writer 类所有的方法在出错的情况下都会引发 IOException 异常。关闭一个流后,再对其进行任何操作都会产生错误。

字符文件输入流

为了读取方便,Java 提供了用来读取字符文件的便捷类——FileReader。该类的构造方法有如下两种重载形式。

	FileReader(File file):在给定要读取数据的文件的情况下创建一个新的 FileReader 对象。其中,file 表示要从中读取数据的文件。FileReader(String fileName):在给定从中读取数据的文件名的情况下创建一个新 FileReader 对象。其中,fileName 表示要从中读取数据的文件的名称,表示的是一个文件的完整路径。

在用该类的构造方法创建 FileReader 读取对象时,默认的字符编码及字节缓冲区大小都是由系统设定的。要自己指定这些值,可以在 FilelnputStream 上构造一个 InputStreamReader。

注意:在创建 FileReader 对象时可能会引发一个 FileNotFoundException 异常,因此需要使用 try catch 语句捕获该异常。

字符流和字节流的操作步骤相同,都是首先创建输入流或输出流对象,即建立连接管道,建立完成后进行读或写操作,最后关闭输入/输出流通道。

将 D:\myJava\HelloJava.java 文件中的内容读取并输出到控制台,使用 FileReader 类的实现代码如下:

public class Test {public static void main(String[] args) {FileReader fr = null;try {fr = new FileReader("D:/myJava/HelloJava.java"); // 创建FileReader对象int i = 0;System.out.println("D:\\myJava\\HelloJava.java文件内容如下:");while ((i = fr.read()) != -1) { // 循环读取System.out.print((char) i); // 将读取的内容强制转换为char类型}} catch (Exception e) {System.out.print(e);} finally {try {fr.close(); // 关闭对象} catch (IOException e) {e.printStackTrace();}}}
}

如上述代码,首先创建了 FileReader 字符输入流对象 fr,该对象指向 D:\myJava\HelloJava.java 文件,然后定义变量 i 来接收调用 read() 方法的返回值,即读取的字符。在 while 循环中,每次读取一个字符赋给整型变量 i,直到读取到文件末尾时退出循环(当输入流读取到文件末尾时,会返回值 -1)。

字符文件输出流

Java 提供了写入字符文件的便捷类——FileWriter,该类的构造方法有如下 4 种重载形式。

	FileWriter(File file):在指定 File 对象的情况下构造一个 FileWriter 对象。其中,file 表示要写入数据的 File 对象。FileWriter(File file,boolean append):在指定 File 对象的情况下构造一个 FileWriter 对象,如果 append 的值为 true,则将字节写入文件末尾,而不是写入文件开始处。FileWriter(String fileName):在指定文件名的情况下构造一个 FileWriter 对象。其中,fileName 表示要写入字符的文件名,表示的是完整路径。FileWriter(String fileName,boolean append):在指定文件名以及要写入文件的位置的情况下构造 FileWriter 对象。其中,append 是一个 boolean 值,如果为 true,则将数据写入文件末尾,而不是文件开始处。

在创建 FileWriter 对象时,默认字符编码和默认字节缓冲区大小都是由系统设定的。要自己指定这些值,可以在 FileOutputStream 上构造一个 OutputStreamWriter 对象。

FileWriter 类的创建不依赖于文件存在与否,如果关联文件不存在,则会自动生成一个新的文件。在创建文件之前,FileWriter 将在创建对象时打开它作为输出。如果试图打开一个只读文件,将引发一个 IOException 异常。

注意:在创建 FileWriter 对象时可能会引发 IOException 或 SecurityException 异常,因此需要使用 try catch 语句捕获该异常。

将用户输入的 4 个字符串保存到 D:\myJava\book.txt 文件中。在这里使用 FileWriter 类中的 write() 方法循环向指定文件中写入数据,实现代码如下:

public class Test {public static void main(String[] args) {Scanner input = new Scanner(System.in);FileWriter fw = null;try {fw = new FileWriter("D:\\myJava\\book.txt"); // 创建FileWriter对象for (int i = 0; i < 4; i++) {System.out.println("请输入第" + (i + 1) + "个字符串:");String name = input.next(); // 读取输入的名称fw.write(name + "\r\n"); // 循环写入文件}System.out.println("录入完成!");} catch (Exception e) {System.out.println(e.getMessage());} finally {try {fw.close(); // 关闭对象} catch (IOException e) {e.printStackTrace();}}}
}

如上述代码,首先创建了一个指向 D:\myJava\book.txt 文件的字符文件输出流对象 fw,然后使用 for 循环录入 4 个字符串,并调用 write() 方法将字符串写入到指定的文件中。最后在 finally 语句中关闭字符文件输出流。

运行该程序,根据提示输入 4 个字符串,如下所示。接着打开 D:\myJava\book.txt 文件,将看到写入的内容。

请输入第1个字符串:
热点要闻
请输入第2个字符串:
个性推荐
请输入第3个字符串:
热搜新闻词
请输入第4个字符串:
本地看点
录入完成!

字符缓冲区输入流

BufferedReader 类主要用于辅助其他字符输入流,它带有缓冲区,可以先将一批数据读到内存缓冲区。接下来的读操作就可以直接从缓冲区中获取数据,而不需要每次都从数据源读取数据并进行字符编码转换,这样就可以提高数据的读取效率。

BufferedReader 类的构造方法有如下两种重载形式。

	BufferedReader(Reader in):创建一个 BufferedReader 来修饰参数 in 指定的字符输入流。BufferedReader(Reader in,int size):创建一个 BufferedReader 来修饰参数 in 指定的字符输入流,参数 size 则用于指定缓冲区的大小,单位为字符。

除了可以为字符输入流提供缓冲区以外,BufferedReader 还提供了 readLine() 方法,该方法返回包含该行内容的字符串,但该字符串中不包含任何终止符,如果已到达流末尾,则返回 null。readLine() 方法表示每次读取一行文本内容,当遇到换行(\n)、回车(\r)或回车后直接跟着换行标记符即可认为某行已终止。

使用 BufferedReader 类中的 readLine() 方法逐行读取 D:\myJava\Book.txt 文件中的内容,并将读取的内容在控制台中打印输出,代码如下:

public class Test {public static void main(String[] args) {FileReader fr = null;BufferedReader br = null;try {fr = new FileReader("D:\\myJava\\book.txt"); // 创建 FileReader 对象br = new BufferedReader(fr); // 创建 BufferedReader 对象System.out.println("D:\\myJava\\book.txt 文件中的内容如下:");String strLine = "";while ((strLine = br.readLine()) != null) { // 循环读取每行数据System.out.println(strLine);}} catch (FileNotFoundException e1) {e1.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {fr.close(); // 关闭 FileReader 对象br.close();} catch (IOException e) {e.printStackTrace();}}}
}

如上述代码,首先分别创建了名称为 fr 的 FileReader 对象和名称为 br 的 BufferedReader 对象,然后调用 BufferedReader 对象的 readLine() 方法逐行读取文件中的内容。如果读取的文件内容为 Null,即表明已经读取到文件尾部,此时退出循环不再进行读取操作。最后将字符文件输入流和带缓冲的字符输入流关闭。

运行该程序,输出结果如下所示:

D:\myJava\book.txt 文件中的内容如下:
热点要闻
个性推荐
热搜新闻词
本地看点

字符缓冲区输出流

BufferedWriter 类主要用于辅助其他字符输出流,它同样带有缓冲区,可以先将一批数据写入缓冲区,当缓冲区满了以后,再将缓冲区的数据一次性写到字符输出流,其目的是为了提高数据的写效率。

BufferedWriter 类的构造方法有如下两种重载形式。

	BufferedWriter(Writer out):创建一个 BufferedWriter 来修饰参数 out 指定的字符输出流。BufferedWriter(Writer out,int size):创建一个 BufferedWriter 来修饰参数 out 指定的字符输出流,参数 size 则用于指定缓冲区的大小,单位为字符。

该类除了可以给字符输出流提供缓冲区之外,还提供了一个新的方法 newLine(),该方法用于写入一个行分隔符。行分隔符字符串由系统属性 line.separator 定义,并且不一定是单个新行(\n)符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARMA模型的性质 1

目录 1.wold分解定理&#xff08;1938&#xff09; 2.AR模型 2.1定义&#xff1a; AR(p) 有三个限制条件&#xff1a; 中心化 AR(p) 模型 2.2 AR模型的平稳性判别 序列拟合函数 R 举例 1.wold分解定理&#xff08;1938&#xff09; 对于任何一个离散平稳序列 {xt} 他都…

python 二维码_Python提取支付宝和微信支付二维码

本文首发于我的个人博客&#xff0c;更多 Python 和 django 开发教程&#xff0c;请访问 追梦人物的博客。支付宝或者微信支付导出的收款二维码&#xff0c;除了二维码部分&#xff0c;还有很大一块背景图案&#xff0c;例如下面就是微信支付的收款二维码&#xff1a;有时候我们…

Java转换流

一般情况下&#xff0c;字节流可以对所有的数据进行操作&#xff0c;但是有些时候在处理一些文本时我们要用到字符流&#xff0c;比如&#xff0c;查看文本的中文时就是需要采用字符流更为方便。所以 Java IO 流中提供了两种用于将字节流转换为字符流的转换流。 InputStreamRe…

ARMA模型的平稳性判别(续)

目录 1.特征根判别法 AR(p)模型对应齐次方程特征根与回归系数多项式根的关系&#xff1a; 2.平稳域判别 &#xff08;1&#xff09;AR(1)(一阶)模型平稳域 &#xff08;2&#xff09;AR(2)(二阶)模型平稳域 3.举例 4.函数展开成幂级数——麦克劳林级数 小结 1.特征根判…

form表单中根据值判断是否disabled_Java 0基础入门 (Html表单、表单元素)

上一篇&#xff1a;Java 0基础入门 (Html标签的使用)表单在网页中主要负责数据采集功能。一.表单实际应用场景百度搜索5173注册如上两张图&#xff0c;图中的黑色线条是我画上去的&#xff0c;如果按照黑线&#xff0c;在Excle中画出这两张表单&#xff0c;相信大家都可以也不是…

ARMA模型性质之平稳AR模型得统计性质

目录 1.均值 Green函数定义 Green函数递推公式 2.方差 举例&#xff1a; 方法1&#xff1a; 方法2&#xff1a; 3.协方差函数 举例1&#xff1a; 举例2&#xff1a; 4.自相关系数 常用的ARA模型自相关系数递推公式&#xff1a; AR模型自相关系数的性质 举例 5.偏自…

Java存储图书信息

使用文件输入/输出流完成存储图书并将图书信息再读取出来的功能。 每到学校开学季都会新进一批图书教材&#xff0c;需要将这些图书信息保存到文件&#xff0c;再将它们打印出来方便老师查看。下面编写程序&#xff0c;使用文件输入/输出流完成图书信息的存储和读取功能&#…

LDA(线性判别分析(普通法))详解 —— python

在这里和大家道个歉&#xff0c;因为我有一篇matlab的LDA和这篇内容大致相同&#xff0c;我就犯懒了&#xff0c;直接复制&#xff0c;没想到公式复制过来全变成了图片&#xff0c;然后造成了&#xff0c;排版有问题&#xff0c;非常难看&#xff0c;真的很抱歉&#xff01;&am…

wordpress 通过域名无法访问_VPS主机和宝塔面板搭建WordPress网站教程

这是一篇Wordpress建站教程&#xff0c;记录了我在VPS主机上&#xff0c;通过使用宝塔面板&#xff0c;搭建Wordpress网站或个人博客的详细步骤&#xff0c;外贸新人或小白在建立网站的时候可以作为参考。WordPress是全球最流行的建站程序&#xff0c;而且是免费的。用Wordpres…

猜数字小游戏

java代码 猜数字小游戏 程序分析 根据提示输入内容 获取输入的内容 使用for循环进行遍历使用if循坏进行数值的判断 输出结果 完整代码 import java.util.Scanner; import java.util.Random; public class mulTip{public static void main(String[] args){System.out.println…

LDA(线性判别分析(普通法))详解 —— matlab

目录 前言 正题 1.LDA的思想 2. 瑞利商&#xff08;Rayleigh quotient&#xff09;与广义瑞利商&#xff08;genralized Rayleigh quotient&#xff09; 3. 二类LDA原理 4.多类LDA原理 5.LDA分类 6.LDA算法流程 二类LDA matlab举例&#xff1a; 1.读取数据集 2.分离…

java 异步得到函数返回值_使用JavaScript进行异步编程

毫无疑问&#xff0c;虽然JavaScript的历史比较悠久&#xff0c;但这并不妨碍它成为当今最受欢迎的编程语言之一。对刚接触该语言的人来说&#xff0c;JavaScript的异步特性可能会有一些挑战。在本文中&#xff0c;我们将了解和使用Promise和async/await来编写小型异步程序。通…

Java Collection接口详解

Collection 接口是 List、Set 和 Queue 接口的父接口&#xff0c;通常情况下不被直接使用。Collection 接口定义了一些通用的方法&#xff0c;通过这些方法可以实现对集合的基本操作。定义的方法既可用于操作 Set 集合&#xff0c;也可用于操作 List 和 Queue 集合。 Collecti…

ARMA模型的性质之MA模型

目录 一、MA模型的定义 二、MA模型的统计性质 1.常数均值 2.常数方差 3.自协方差函数q阶结尾 4.自相关系数q阶截尾 举例&#xff1a; 三、MA模型的可逆 1.可逆的定义和条件 2.MA与AR模型的对比 3.逆函数的递推公式 举例&#xff1a; 四、MA模型的偏自相关系数拖尾…

python难度如何_【经验分享】想转行学python,过来人提醒大家几点

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 提醒大家几点 一&#xff1a;盲目的去学 当初我在对于python这个行业什么都不了解的情况下&#xff0c;比如&#xff1a;不知道未来发展趋势&#xff0c;不知道学习python应该注意哪些初始问题&#xff0c;不知道具体的学习规划学…

ArrayList和LinkedList类的用法及区别

List 是一个有序、可重复的集合&#xff0c;集合中每个元素都有其对应的顺序索引。List 集合允许使用重复元素&#xff0c;可以通过索引来访问指定位置的集合元素。List 集合默认按元素的添加顺序设置元素的索引&#xff0c;第一个添加到 List 集合中的元素的索引为 0&#xff…

ARMA模型的性质之ARMA模型

目录 一、ARMA模型的定义 二、平稳条件与可逆条件 三、传递形式与逆转形式 四、ARMA(p,q)模型的统计性质 1.均值 2.自协方差函数 3.自相关系数 4.ARMA(p,q)模型自相关系数拖尾&#xff0c;偏自相关系数拖尾 小结 一、ARMA模型的定义 具有如下结构的模型称为自回归移动…

R之Excel文件读取与程序包的安装调用

目录 方法一 方法二 1.用命令安装 2.从下拉菜单安装 三、加载所需安装包 方法一 方法二 四、使用新程序包读取数据 方法一 另存为 .csv 文件 这是wps的另存为 然后选择位置&#xff0c;重命名或更改格式为 .csv 这是excel 的另存为 文件 —— 另存为 —— 选择位置 …

Java遍历Map集合的四种方式

Map 有两组值&#xff0c;因此遍历时可以只遍历值的集合&#xff0c;也可以只遍历键的集合&#xff0c;也可以同时遍历。Map 以及实现 Map 的接口类&#xff08;如 HashMap、TreeMap、LinkedHashMap、Hashtable 等&#xff09;都可以用以下几种方式遍历。 1 . 在 for 循环中使…

diag开关什么意思_双控开关接线图_一灯双控开关接线图_单联双控开关接线图_双控开关接线图实物图...

电工学习网&#xff1a;www.diangon.com关注电工学习网官方微信公众号“电工电气学习”&#xff0c;收获更多经验知识。双控开关接线图_一灯双控开关接线图_单联双控开关接线图_双控开关接线图实物图现在市场上面所出售的开关种类非常的多&#xff0c;双控开关正好能够满足人们…