Java IO流字符流简介及常用字符流的基本使用

字符流分为输入字符流(Writer)和输出字符流(Reader),这两种字符流及其子类字符流都有自己专门的功能。在编码中我们常用的输出字符流有FileWriter、PrintWriter等,而常用的输入字符流有StringReader、FileReader、BufferedReader和InputStreamReader等等。Writer是用于写入字符流的抽象类。它的子类必须实现的唯一方法是write(char [],int,int),flush()和close()。 而Reader是用于读取字符流的抽象类。它的子类必须实现的唯一方法是read(char [],int,int)和close()。我们在使用Writer和Reader的过程中,可以通过继承的方式实现,同时我们也可以在继承了Writer或Reader的子类中将重写这里定义父类中已有的一些方法,来实现我们想要的功能。

字符流的结构体系图为(JDK 1.8):

输入字符流(Writer)和输出字符流(Reader)咋区分?

就简单的用磁盘和内存来说,以内存为核心。从内存出来的叫输出,进入内存的叫输入。那么从内存中把流输出写入到磁盘上的就是输出字符流,从磁盘上读取数据写入到内存中的就叫输入流。不知这样说是否合理,有问题还望大家多多指教。

下面来看看常用的几种字符流的使用:

1、FileReader & FileWriter

FileReader类从InputStreamReader类继承而来,该类按字符读取流中数据。它的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。 若要自己来指定这些值,需要在FileInputStream上构造一个InputStreamReader。 FileReader是用于读取字符流,要读取原始字节流,请考虑使用FileInputStream。而FileWriter类从OutputStreamWriter类继承而来,该类按字符向流中写入数据。它的构造函数假定默认字符编码和默认字节缓冲区大小是可以接受的。若也要自己指定这些值,则需要在FileOutputStream上构造一个OutputStreamWriter。 FileWriter类创建对象之后所传入的文件是否可用或是否可能被创建取决于底层平台,特别是某些平台允许一次只能打开一个文件来写入一个FileWriter (或其他文件写入对象)。 在这种情况下,如果所涉及的文件已经打开,则此类中的构造函数将失败。FileWriter是用于写入字符流,要编写原始字节流,请考虑使用FileOutputStream。

示例代码:

1 packagecom.tianjh.io.writer;2

3 import java.io.*;4

5 /**

6 * Created on 2020/12/157 * $FileReaderWriterDemo 包含FileWriter、FileReader的简单使用8 *

9 * FileWriter 是向指定的文件写入数据,write方法会把字符一个一个的写入磁盘中10 * FileReader 是向指定的文件读取数据,read方法会一个一个字符的从磁盘往回读数据11 *12 *@authortianjh13 */

14 public classFileReaderWriterDemo {15 public static voidmain(String[] args) {16

17 //声明一个文件

18 String fileName = "D:\\hello.txt";19 //实例化一个file对象

20 File file = newFile(fileName);21 /*

22 * 1.使用FileWriter的write向磁盘上写文件23 * write方法会把字符一个一个的写入磁盘中24 */

25 try{26 //实例化一个fileWriter对象

27 FileWriter fileWriter = newFileWriter(file);28 fileWriter.write(99);29 fileWriter.write("您好!");30 fileWriter.write("hello world!");31 fileWriter.flush();32 //关闭流,释放资源文件

33 fileWriter.close();34 } catch(IOException e) {35 e.printStackTrace();36 }37

38 /*

39 * 2.使用FileReader的read方法从磁盘上读入文件40 * read方法会一个一个字符的从磁盘往回读数据41 */

42 try{43 inta;44 //1. 输出指定文件的每个字节的ASCII码

45 FileReader fileReader = newFileReader(fileName);46 while ((a = fileReader.read()) != -1) {47 //输出指定文件的每个字节的ASCII码

48 System.out.print(a + " ");49 //expected output: 99 24744 22909 65281 104 101 108 108 111 32 119 111 114 108 100 33

50 }51 System.out.println();52 fileReader.close();53

54 //2. 输出每个字节ASCII码所对应的字符

55 FileReader fileReader1 = newFileReader(fileName);56 while ((a = fileReader1.read()) != -1) {57 //输出每个字节ASCII码所对应的字符

58 System.out.print((char) a);59 //expected output: c您好!hello world!

60 }61 fileReader1.close();62 System.out.println();63 } catch(IOException e) {64 e.printStackTrace();65 }66 }67 }

测试结果:

写入到hello.txt文件之后的数据为:

2、PrintWriter

PrintWriter将对象的格式化表示形式打印到文本输出流。这个类实现了全部在PrintStream中找到的所有打印方法。但它不包含用于编写原始字节的方法,程序应使用未编码的字节流。它与PrintStream类不同,PrintStream是针对字节流的,而PrintWriter是针对字符流的。如果PrintWriter启用自动刷新,它只会在调用的println,printf,或format方法来完成,而不是当一个换行符恰好是输出。这些方法使用平台自己的行分隔符而不是换行符。这个类中的方法不会抛出IO异常,尽管它的一些构造函数可能会抛出异常。我们可以通过调用checkError()方法查询是否发生错误。

示例代码:

1 packagecom.tianjh.io.writer;2

3 importjava.io.PrintWriter;4

5 /**

6 * Created on 2020/12/157 *8 */

9 public classPrintWriterDemo {10 public static void main(String[] args) throwsException {11 String fileName = "D:\\hello.txt";12 String s1 = "hello world!";13 String s2 = "您们好!";14 PrintWriter printWriter = newPrintWriter(fileName);15 printWriter.println(s1);16 printWriter.println(s2);17 printWriter.close();18 }19 }

测定结果:

3、StringReader

StringReader是一个字符流,其源是一个字符串。它主要用于处理字符串。

示例代码:

1 packagecom.tianjh.io.reader;2

3 importjava.io.IOException;4 importjava.io.StringReader;5

6 /**

7 * Created on 2020/12/158 * $StringReaderDemo 测试使用StringReader9 *10 */

11 public classStringReaderDemo {12 public static void main(String[] args) throwsIOException {13 String s = "hello,world!";14 s = s + "我是一条测试数据";15 System.out.println(s);16 //expected output: hello,world!我是一条测试数据17

18 //实例化一个stringReader对象,使用read方法进行读取

19 StringReader stringReader = newStringReader(s);20 inta;21 while ((a = stringReader.read()) != -1) {22 System.out.print((char) a);23 //expected output: hello,world!我是一条测试数据

24 }25 System.out.println();26 }27 }

输出结果:

5、BufferedReader

BufferedReader它的用法和BufferedInputStream类似,只是它们一个一个处理字符,一个处理字节。BufferedReader用来处理字符。BufferedInputStream的使用可参考https://www.cnblogs.com/jhtian/p/14115355.html

示例代码:

packagecom.tianjh.io.reader;importjava.io.BufferedReader;importjava.io.FileReader;importjava.io.IOException;/*** Created on 2020/12/15

* $BufferedReaderDemo 的基本使用

**/

public classBufferedReaderDemo {public static void main(String[] args) throwsIOException {//声明一个文件

String fileName = "D:\\hello.txt";

String s2;

StringBuilder s3= newStringBuilder();

FileReader fileReader= newFileReader(fileName);

BufferedReader bufferedReader= newBufferedReader(fileReader);while ((s2 = bufferedReader.readLine()) != null) {

s3.append(s2);

}

System.out.println(s3);//expected output: hello world!您们好!

bufferedReader.close();

}

}

输出结果:

java io字符流_Java IO流字符流简介及基本使用相关推荐

  1. java io流过滤流_JAVA io流 文件流 字节流 字符流 过滤流 缓冲流

    一.概念 1.1.按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 1.2.按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图 ...

  2. 字节流转化为文件流_JAVA IO分析一:File类、字节流、字符流、字节字符转换流...

    因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...

  3. java io字符输出流_JAVA IO 字符输入流与输出流总结说明

    目录 OutputStreamWriter 用于向本地文件中写入数据 InputStreamReader 用于读取本地文件中的字节数据 FileReader 用于读取本地文件中的字节数据 FileWr ...

  4. 基于java洗浴中心管理系统_Java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  5. JAVA mac系统io文件流_Java IO流基础1--IO的分类体系与文件流

    什么是IO流 Java中的IO 了解什么是IO流之前,要先知道什么是IO.IO,就是in和out(即输入和输出),指应用程序和外部设备之间的数据传递,常见的外部设备包括文件.管道.网络连接等. 流的概 ...

  6. java io流填空题,java面试题选择题_java,Io流面试题和选择题

    Java对象的序列化指将一个java对象写入OI流中,与此对应的是,对象的反序列化则从IO流中恢复该java对象.下面就由小编为大家介绍一下java Io流面试题和选择题的文章,欢迎阅读. java ...

  7. java io框架图_Java IO流体系继承结构图解析

    Java IO体系结构看似庞大复杂,其实有规律可循,要弄清楚其结构,需要明白两点: 1. 其对称性质:InputStream 与 OutputStream, Reader 与 Writer,他们分别是 ...

  8. java 文件转换成流_java -IO流_转换流

    转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStre ...

  9. java io读取文件_java io读取文件操作代码实例

    这篇文章主要介绍了java io读取文件操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 主要分为字节读取和字符读取,字节读取可以一个一个 ...

最新文章

  1. binlog流程 mysql_小米 MySQL 数据实时同步到大数据数仓的架构与实践
  2. 【解决方法】java.lang.ClassNotFoundException:
  3. PAT甲级1110 Complete Binary Tree:[C++题解]判断完全二叉树
  4. boost::geometry::transform_variant用法的测试程序
  5. MySQL TEXT数据类型的最大长度
  6. 图的遍历、最小生成树、最短路径
  7. python3.6---之f'{}'
  8. The best programmers are the quickest to Google
  9. 【转】每一种创伤,都是一种成熟
  10. Easyui datagrid加载本地Json数据
  11. Android蓝牙自动配对和Pin码设置
  12. java media player 设置音量_SoundPlayer可调音量 - c#
  13. JavaScript实现的简单烟花特效代码1.15
  14. 二级指针(指向指针的指针)
  15. 54个提高PHP程序运行效率的方法(转载)
  16. XML和注解(Annotation)
  17. 计算机组成原理——TEC-2储存器实验
  18. python田忌赛马
  19. cynic计算机专业英语,计算机专业英语词汇2-英语文章阅读-大耳朵英语 - 免费在线英语学习 口语练习 四级听力资料 在线翻译 网络课堂 英语社区...
  20. catia圆管焊接焊接_CATIA焊接教程

热门文章

  1. MyBatis学习总结(25)——Mybatis Generator generatorConfig.xml配置文件详细说明
  2. Windows学习总结(8)——DOS窗口查看历史执行过的命令的三种方式
  3. RabbitMQ学习总结(1)——基础概念详细介绍
  4. java线程和内核线程的,Java中内核线程理论及实例详解
  5. 【读书笔记】周志华《机器学习》第三版课后习题讨第一章-绪论
  6. NTFS for Mac支持Mac拷贝文件到硬盘
  7. [转] C# 绘制报表,使用Graphics.DrawString 方法
  8. 【知乎】神回答,我们吐的不是槽 233
  9. Mongodb亿级数据量的性能测试比较完整收藏一下
  10. Caused by: java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher