字符流用于处理字符数据的读取和写入,它以字符为单位。

  一、Reader类与Writer类

  1.Reader类是所有字符输入流的父类,它定义了操作字符输入流的各种方法。

  

  2.Writer类是所有字符输出流的父类,它定义了操作输出流的各种方法。

  

  二、InputStreamReader类与OutputStreamWriter类

  1.InputStreamReader是字节流通向字符流的桥梁。它可以根据指定的编码方式,将字节输入流转换为字符输入流。

  (1)构造方法有两种:

  • InputStreamReader(InputStream in):使用默认编码方式创建对象
  • InputStreamReader(InputStream in , String cname):使用指定的编码方式cname创建对象

  (2)常用方法

  

  (3)示例

package jun.iplab.inputstreamreader;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;public class InputStreamReaderTest {public static void main(String[] args) {try {File file = new File("D:\\JavaIOTest\\InputStreamReaderTest.txt");FileInputStream fis = new FileInputStream(file);InputStreamReader isr = new InputStreamReader(fis);int rs;// 顺序读取文件里的内容并赋值给变量rs,通过强制类型转换可以将字节类型转换成字符类型while ((rs = isr.read())!= -1) {System.out.print((char)rs + "(" + rs + ")");}isr.close();fis.close();} catch (IOException e) {e.printStackTrace();}}
}输出:
Y(89)o(111)u(117) (32)a(97)r(114)e(101) (32)b(98)e(101)a(97)u(117)t(116)i(105)f(102)u(117)l(108) (32)t(116)o(111)n(110)i(105)g(103)h(104)t(116).(46)

  2.OutputStreamWriter是字节流通向字符流的桥梁。写出字节,并根据指定的编码方式,将之转换为字符流。

  (1)常用构造方法

  • OutputStreamWriter(OutputStream out)
  • OutputStreamWriter(OutputStream out, String cname)

  (2)常用方法

  

  (3)示例代码

package jun.iplab.outputstreamwriter;import java.io.*;public class OutputStreamWriterTest {public static void main(String[] args) {File file_in = new File("D:\\JavaIOTest\\InputStreamReaderTest.txt");File file_out = new File("D:\\JavaIOTest\\OutputStreamWriterTest.txt");try {if (!file_in.exists()) {file_in.createNewFile();}if (!file_out.exists()) {file_out.createNewFile();}// 从file_in读出内容,以字节流的形式FileInputStream fis = new FileInputStream(file_in);// 将输入字节流转换成输入字符流InputStreamReader in = new InputStreamReader(fis);// 以覆盖方式向file_out中输出字节流FileOutputStream fos = new FileOutputStream(file_out, false);// 将输出字符流转换成输出字节流并输出到FileOutputStream对象中OutputStreamWriter out = new OutputStreamWriter(fos);int is;while ((is = in.read())!=-1) {out.write(is);}in.close();out.close();fis.close();fos.close();} catch (IOException e) {e.printStackTrace();}}
}

  三、FileReader类与FileWriter类

  1.FileReader类是Reader类的子类,它实现了从文件中读出字符数据,是文件字符输入流。

  (1)两种构造方法

  • FileReader(String filepath)
  • FileReader(File file)

  (2)示例

package jun.iplab.filereader;import java.io.File;
import java.io.FileReader;
import java.io.IOException;public class FileReaderTest {public static void main(String[] args) {try {File file = new File("D:\\JavaIOTest\\OutputStreamWriterTest.txt");FileReader fr = new FileReader(file);char[] data = new char[512];int rs = 0;// 从文件中读出字符数据并保存在字符数组data中,并且返回实际读到的字符个数while ((rs = fr.read(data))>0) {System.out.println(rs);for (int i = 0; i < rs; i++) {System.out.print(data[i] + " ");}System.out.println();String str = new String(data, 0, rs);System.out.println(str);}fr.close();} catch (IOException e) {e.printStackTrace();}}
}输出:
26
Y o u   a r e   b e a u t i f u l   t o n i g h t .
You are beautiful tonight.

  2.FileWriter类是Writer类的子类,它实现了将字符数据写入文件中,是文件字符输出流。

  (1)构造方法

  • FileWriter(String filepath)
  • FileWriter(File file)

  (2)示例 

package jun.iplab.filewriter;import java.io.*;public class FileWriterTest {public static void main(String[] args) {try {File file_out = new File("D:\\JavaIOTest\\FileWriterTest.txt");if (!file_out.exists()) {file_out.createNewFile();}FileReader fr = new FileReader("D:\\JavaIOTest\\OutputStreamWriterTest.txt");FileWriter fw = new FileWriter(file_out,false);int is;while ((is=fr.read())!= -1) {System.out.print(is + " ");fw.write(is);}fr.close();fw.close();} catch (IOException e) {e.printStackTrace();}}
}输出:
89 111 117 32 97 114 101 32 98 101 97 117 116 105 102 117 108 32 116 111 110 105 103 104 116 46 

  四、BufferedReader类与BufferedWriter类

  1.BufferedReader类是Reader类的子类,该类可以以行为单位读取数据。

  (1)构造方法为

  • BufferedReader(Reader in)

  (2)BufferedReader类中提供了一个ReaderLine()方法,可以以行为单位读取数据

  (3)示例

package jun.iplab.bufferreader;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class BufferedReaderTest {public static void main(String[] args) {try {FileReader fr = new FileReader("D:\\JavaIOTest\\OutputStreamWriterTest.txt");BufferedReader br = new BufferedReader(fr);String aline;while ((aline=br.readLine())!=null) {System.out.println(aline);}br.close();} catch (IOException e) {e.printStackTrace();}}
}输出:
You are beautiful tonight.
I am your solider.

  2.BufferedWriter类是Writer类的子类,该类可以以行为单位写入数据。

  (1)构造方法为

  • BufferedWriter(Writer out)

  (2)BufferedWriter类提供了一个newLine()方法,Writer类中没有此方法,该方法时换行标记。

  (3)示例代码

package jun.iplab.bufferedwriter;import java.io.*;public class BufferedWriterTest {public static void main(String[] args) {try {File file = new File("D:\\JavaIOTest\\BufferedWriterTest.txt");FileWriter fw = new FileWriter(file, true);BufferedWriter bw = new BufferedWriter(fw);bw.newLine();bw.write("hello");bw.newLine();bw.write("23333");bw.close();} catch (IOException e) {e.printStackTrace();}}
}

  五、PrintStream类与PrintWriter类

  1.PrintStream是打印输出流,它可以直接输出各种类型的数据。

  (1)构造方法为:PrintStream(OutputStream out)

  (2)常用方法为:

  

  (3)示例代码:

package jun.iplab.printstream;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Random;public class PrintStreamTest {public static void main(String[] args) {PrintStream ps;try {File file = new File("D:\\JavaIOTest\\PrintStreamTest.txt");if (!file.exists()) {file.createNewFile();}// 创建PrintStream对象ps = new PrintStream(new FileOutputStream(file));Random r = new Random();int rs;for (int i = 0; i < 5; i++) {rs = r.nextInt(100);// 调用println方法向PrintStreamTest.tx中写入随机数加换行符ps.println(rs + "\t");}ps.close();} catch (IOException e) {e.printStackTrace();}}
}PrintStreamTest.txt中的内容:
73
57
24
30
78    

  2.PrintWriter是打印输出流,该流把Java语言的内构类型以字符表示形式传送到相应的输出流中,可以以文本的形式浏览。

  (1)构造方法:

  • PrintWriter(Writer out)
  • PrintWriter(OutputStream out)

  (2)常用方法:

  

  (3)示例代码:

package jun.iplab.printwriter;import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;public class PrintWriterTest {public static void main(String[] args) {File file_in = new File("D:\\JavaIOTest\\OutputStreamWriterTest.txt");File file_out = new File("D:\\JavaIOTest\\PrintWriterTest.txt");try {// 创建一个BufferedReader对象BufferedReader br = new BufferedReader(new FileReader(file_in));// 创建一个PrintWriter对象PrintWriter pw = new PrintWriter(new FileWriter(file_out));String aline;// 读出file_in中的数据并且打印输出到file_out中while ((aline=br.readLine())!=null) {System.out.println(String.valueOf(aline));pw.println(aline);}br.close();pw.close();} catch (IOException e) {e.printStackTrace();}}
}输出:
You are beautiful tonight.
I am your solider.

  六、System.in获取用户输入

  System类是final类,该类不能被继承,也不能创建System类的实例对象。

  Java中实现键盘输入的一般过程是:

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);try {        String str = br.readLine();        对str的一些操作     br.close();            } catch (IOException e) {            e.printStackTrace();        }

  将键盘输入的内容存储到文件中:

package jun.iplab.systemin;import java.io.*;public class SystemInTest {public static void main(String[] args) {File file = new File("D:\\JavaIOTest\\SystemInTest.txt");try {if (!file.exists()) file.createNewFile();InputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);String str = br.readLine();System.out.println("输入的内容是: " + str);FileWriter fw = new FileWriter(file,true);BufferedWriter bw = new BufferedWriter(fw);bw.write(str);br.close();bw.close();fw.close();} catch (IOException e) {e.printStackTrace();}}}输出:
You are beautiful tonight.
输入的内容是: You are beautiful tonight.

  七、Scanner类

  Scanner类是java.util包中的类,该类用来实现用户的输入,是一种只要有控制台就能实现输入操作的类。

  1.构造方法

1.Scanner(InputStream in):
2.Scanner(File file)...

  2.Scanner类的主要方法

next();     // 不可以读入空格,读到空白符(空格、回车、tab...)就结束,一般放到最后一个
nextLine(); // 可以读入空格,读到回车符就结束
nextInt();
close();

  3.代码示例

package integer.jun.iplab;import java.util.Scanner;public class ScannerTest {public static void main(String[] args) {String name;int age;String address;// 创建Scanner对象Scanner sc = new Scanner(System.in);name = sc.nextLine();age = sc.nextInt();address = sc.next();System.out.println(name + " " + age + " " + address );}
}控制台:
尼古拉斯 赵四
18
象牙山
尼古拉斯 赵四 18 象牙山

转载于:https://www.cnblogs.com/BigJunOba/p/9412942.html

Java基础(二十七)Java IO(4)字符流(Character Stream)相关推荐

  1. Java基础(17)——字节流、字符流

    目录 第一章 IO概述 1.1 什么是IO 1.2 IO的分类 1.3 IO的流向说明图解 1.4 顶级父类们 第二章 字节流 2.1 一切皆为字节 2.2 字节输出流[OutputStream] 2 ...

  2. 【Java基础】吃透Java IO:字节流、字符流、缓冲流

    文章目录 [Java基础-3]吃透Java IO:字节流.字符流.缓冲流 一.初识java IO 1.1 IO流分类 1.1.1 输入流与输出流 1.1.2 字节流与字符流 1.1.3 节点流和处理流 ...

  3. 计算机java语言教程,计算机JAVA教程二讲Java语言基础知识.doc

    计算机JAVA教程二讲Java语言基础知识 2.1简单数据类型 2.1.1 标识符和保留字 1.标识符 程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier).Java语言 ...

  4. 逆向爬虫34 Java基础二

    逆向爬虫34 Java基础二 目的 总结java和之前学过语言之间相似和不同的地方,方便记忆 关于Object ( 上节回顾 ) Object可以泛指java中的任何对象 -> 父类可以泛指子类 ...

  5. Java IO: 其他字符流(下)

    转载自   Java IO: 其他字符流(下) 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackRe ...

  6. Java基础17:Java IO流总结

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a724888/article/details/80201802 这位大侠,这是我的公众号:程序员江湖 ...

  7. 一文读懂Java中File类、字节流、字符流、转换流

    一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...

  8. 视频教程-Java基础与实践-Java

    Java基础与实践 CSDN高校俱乐部指导老师,程序爱好者,教师,国家认证的软件架构设计师.系统分析师.信息系统项目管理师.软件设计师.网络工程师.本人热衷于计算机软件相关的研发.技术探讨.学习分享和 ...

  9. 《Java基础知识》Java变量的声明、初始化和作用域

    <Java基础知识>Java变量的声明.初始化和作用域 一.Java变量的声明 在 Java 程序设计中,每个声明的变量都必须分配一个类型.声明一个变量时,应该先声明变量的类型,随后再声明 ...

  10. java里面string什么意思_「Java基础知识」Java中的字符串是什么

    原标题:「Java基础知识」Java中的字符串是什么 字符串顾名思义就是一些字符组合在一起组成的一串数据,称作字符串,在Java中字符串用双引号包围起来,格式为String string = &quo ...

最新文章

  1. Spring5源码 - Spring IOC 注解复习
  2. 分页请求json数据_pyspider抓取虎嗅网文章数据
  3. java 语言如何判断素数_C语言实验之判断素数(循环结构java)方法讲解
  4. oracle 学习笔记
  5. php apc 失效时间,PHP APC无法正常工作
  6. linux7如何进入紧急模式,CentOS7开机进入紧急模式EmergencyMode的解决办法
  7. Javascript实现页面跳转传值示例Demo
  8. 会做饭的机器人曰记_做饭机器人作文作文300字
  9. php无法调用shell脚本文件,php调用shell脚本--126错误
  10. window驱动备份与安装
  11. 机器学习基础-特征工程简析
  12. TCP粘包以及UDP丢包问题
  13. 第十六周项目3函数指针调用函数 吃饭睡觉打豆豆
  14. 游戏策划入门(2)——如何写一份项目建议书?
  15. 选择SAP IBP(集成业务计划云)的十大理由
  16. 常用编程工具:VS Code,这款编译工具到底好不好用?
  17. 从事数据分析很牛X?要看你有没有认证
  18. 【论文解读】Exploring Complementary Strengths of Invariant and Equivariant Representations(小样本等变和不变的互补)
  19. shui jisfnemskddp psijsjfsif
  20. 信息图形领域的普利策奖-Malofiej Award(马洛菲杰奖)

热门文章

  1. 2022-2028年中国改性尼龙行业市场全景评估及产业前景规划报告
  2. 【springboot】入门
  3. sqlplus连接时出现错误:shared memory realm does not exist 解决
  4. NNVM AI框架编译器
  5. 常用语义分割小样本模型
  6. 深度学习在计算机视觉中的应用长篇综述
  7. 2021年大数据ELK(五):Elasticsearch中的核心概念
  8. 2021年大数据常用语言Scala(二十一):函数式编程 遍历 foreach
  9. Python 判断本地python 本地版本2x or 3x
  10. css float 的使用