Java_IO——字符流
系列文章目录
Java_IO——概述
Java_IO——字节流
Java_IO——字符流
Java_IO——缓冲流
Java_IO——属性集与转换流
Java_IO——序列化与反序列化、打印流
Java_IO——IO异常的处理
文章目录
- 系列文章目录
- 前言
- 输入流
- Reader类(字符输入流)
- FileReader类(文件字符输入流,字符输入流(Reader)的子类(extends InputStreamReader extends Reader ))
- 使用
- 输出流
- Writer类(字符输出流)
- FileWriter类(文件字符输出流,字符输出流(Writer)的子类(extends InputStreamWriter extends Writer ))
- 使用
- 基础方法:
- 续写与换行:
前言
使用字节流读取中文字符时,不会显示完整的字符,因为一个中文可能占用多个字节储存。所以,java提供了一些字符流类,以字符为单位,专门用于处理文本文件。
中文字符编码:
UTF-8:一个中文占三个字节
GKB:一个中文占两个字节
输入流
Reader类(字符输入流)
java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。
它定义了字符输入流的基本共性功能方法:
- public void close()
关闭此输出流并释放与此流相关联的所有系统资源 - public int read()
从输入流读取一个字符 - public int read(char[] cbuf)
从输入流中读取一些字符,并将它们存储到字符数组cbuf中
FileReader类(文件字符输入流,字符输入流(Reader)的子类(extends InputStreamReader extends Reader ))
java.io.FileReader类是读取字符文件的便利类,构造时使用系统默认的字符编码和默认字节缓冲区
作用:把硬盘文件中的数据以字符的方式读取到内存中
- 构造方法:
- FileReader(String fileName)
- FileReader(File file)
参数:
String fileName:文件路径
File file:文件
- 运行方式:
- 创造一个FileReader对象
- 会把FileReader对象指向读取的文件
使用
- 创建FileReader对象,构造方法中绑定要读取的数据源
- 调用FileReader对象中的方法read,读取文件
- 释放资源
优化:使用public int read(char[] cbuf)方法一次读取多个字符
Tip:输出时需要使用String类中的构造方法:
String(char[] value)
String(char[] value,int offset,int count)
- String(char[] value)
- String(char[] value,int offset,int count)
将字符数组转换为字符串- 参数:
- char[] value:目标数组
- int offset:起始索引
- int count:转换个数
- 参数:
package DemoReader;import java.io.FileReader;
import java.io.IOException;public class Demo01Reader {public static void main(String[] args) throws IOException {//1.创建FileReader对象,构造方法中绑定要读取的数据源FileReader fr = new FileReader("D:\\***\\a.txt");/*//2.调用FileReader对象中的方法read,读取文件int len = 0;while ((len = fr.read()) != -1) {System.out.println((char) len);}*///优化:使用public int read(char[] cbuf)方法一次读取多个字符char[] cbuf = new char[1024];int len = 0;//2.调用FileReader对象中的方法read,读取文件while ((len = fr.read(cbuf)) != -1) {System.out.println(new String(cbuf,0,len));}//3.释放资源fr.close();}
}
输出流
Writer类(字符输出流)
java.io.Writer抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地
它定义了字符输出流的基本共性功能方法:
- void writer(int c)
写入单个字符 - void writer(char[] cbuf)
写入字符数组 - abstract void writer(char[] cbuf,int off,int len)
写入字符数组的一部分 - void writer(String str)
写入字符串 - void writer(String str,int off,int len)
写入字符串的一部分 - viod flush()
刷新该流的缓冲 - void close()
关闭此流,但要先刷新
flush与close的区别:
- flush:刷新缓冲区,流对象可以继续使用
- close:先刷新缓冲区,然后通知系统释放资源,然后流对象就不能使用了
package DemoWriter;import java.io.FileWriter;
import java.io.IOException;public class Demo02FlushAndClose {public static void main(String[] args) throws IOException {//1.创建一个FileWriter对象,构造方法中传递写入数据的目的地FileWriter fw = new FileWriter("D:\\***\\d.txt");//2.调用FileWriter对象中的方法write,把数据写入到内存缓冲区中(字节变为字符的过程)fw.write(97);//3.调用FileWriter对象中的方法flush,把内存缓冲区中的数据,刷新到文件中fw.flush();//刷新后还可以继续使用fw.write(98);fw.flush();fw.write(99);//4.释放资源(会先把内存缓冲区中的数据,刷新到文件中)fw.close();//close后就不能再使用了fw.write(100);//IOException: Stream closed}
}
FileWriter类(文件字符输出流,字符输出流(Writer)的子类(extends InputStreamWriter extends Writer ))
java.io.FileWriter类是写出字符到文件的便利类,构造时使用系统默认的字符编码和字节缓冲区
作用:把硬盘文件中的数据以字符的方式写入到文件中
- 构造方法:
- FileWriter(String fileName)
根据给定的文件名构造一个FileWriter对象 - FileWriter(File file)
根据给定的File对象构造一个FileWriter对象
- FileWriter(String fileName)
- 运行方式:
- 创建一个FileWriter对象
- 会根据构造方法中传递的文件/文件路径,创建文件
- 会把FileWriter对象指向创建好的文件
使用
基础方法:
- 创建一个FileWriter对象,构造方法中传递写入数据的目的地
- 调用FileWriter对象中的方法write,把数据写入到内存缓冲区中(字节变为字符的过程)
- 调用FileWriter对象中的方法flush,把内存缓冲区中的数据,刷新到文件中
- 释放资源(会先把内存缓冲区中的数据,刷新到文件中)
package DemoWriter;import java.io.FileWriter;
import java.io.IOException;public class Demo01Writer {public static void main(String[] args) throws IOException {//1.创建一个FileWriter对象,构造方法中传递写入数据的目的地FileWriter fw = new FileWriter("D:\\***\\d.txt");//2.调用FileWriter对象中的方法write,把数据写入到内存缓冲区中(字节变为字符的过程)fw.write(97);//3.调用FileWriter对象中的方法flush,把内存缓冲区中的数据,刷新到文件中
// fw.flush();//4.释放资源(会先把内存缓冲区中的数据,刷新到文件中)fw.close();}
}
其他可以使用方法:
- void writer(char[] cbuf)
写入字符数组 - abstract void writer(char[] cbuf,int off,int len)
写入字符数组的一部分 - void writer(String str)
写入字符串 - void writer(String str,int off,int len)
写入字符串的一部分
package DemoWriter;import java.io.FileWriter;
import java.io.IOException;public class Demo03Writer {public static void main(String[] args) throws IOException {//创建一个FileWriter对象,构造方法中传递写入数据的目的地FileWriter fw = new FileWriter("D:\\***\\e.txt");//void writer(char[] cbuf)char[] cs = {'a','b','c','d','e'};fw.write(cs);//abstract void writer(char[] cbuf,int off,int len)fw.write(cs,2,3);//void writer(String str)fw.write("彭于晏");//void writer(String str,int off,int len)fw.write("123彭于晏",3,3);//释放资源fw.close();}
}
续写与换行:
续写:
- 使用两个参数的构造方法:
- FileWriter(String fileName,boolean append)
- FileWriter(File file,boolean append)
- 参数:
- String fileName,File file:写入数据的目的地
- boolean append:续写开关
- true:续写,不覆盖源文件,继续在文件的末尾追加数据
- foolse:不续写,创建一个新文件,覆盖源文件
- 参数:
- 换行:
- 写换行符:
- windows:\r\n
- linux:\n
- mac:\r
- 写换行符:
Java_IO——字符流相关推荐
- Java基础(二十七)Java IO(4)字符流(Character Stream)
字符流用于处理字符数据的读取和写入,它以字符为单位. 一.Reader类与Writer类 1.Reader类是所有字符输入流的父类,它定义了操作字符输入流的各种方法. 2.Writer类是所有字符输出 ...
- Java学习总结:42(字节流和字符流)
字节流与字符流 上一节我们学习了文件操作类File,但是File类虽然可以操作文件,但是却不能操作文件的内容.如果要进行文件内容的操作,就必须依靠流的概念来完成.流在实际中分为输入流和输出流两种,输入 ...
- IO流 字符流 字节流 缓冲流 文件的复制
IO流 IO概述 IO流就是一个管道,是用来在设备之间传输数据 input:相对于内存/程序 往进走输入流 output:相对于内存/程序 往硬盘写入 分类 根据数据进出方式 1.输出流: FileW ...
- Java IO 字节流与字符流 (三)
概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...
- JavaIO操作(1)字节流和字符流-1
3.2.字节流和字符流(核心) 使用File类执行的所有操作都是针对于文件本身,但是却没有针对于文件的内容,而要进行文件内容操作就需要通过Java之中提供的两组类完成: · 字节操作流(是在JDK 1 ...
- Java基础知识强化之IO流笔记41:字符流缓冲流之复制文本文件案例02(使用 [ newLine() / readLine() ] )(重要)...
1. 使用字符流缓冲流的特殊功能 [ newLine() / readLine() ] 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中 数据源: a.txt -- 读取数据 ...
- 关于java中的字符流的一个使用例子
使用字符流的方式进行文件HelloWorld.java的读取并打印至控制台. package test;import java.io.BufferedInputStream; import java. ...
- java 字符流与字节流区别_JAVA 字符流与字节流的区别
Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 U ...
- 字节流与字符流的区别(good!)
字节流与字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了 ...
最新文章
- 论电子计算机在审计中的应用,计算机技术在审计中的应用领域分析.doc
- 如何巧妙的使用ArrayList的Clone方法
- 【案例】无线串口模块 星型网络组网 案例
- 高地址和低地址、高字节低字节、大小端模式的转换,存储顺序
- symfony2的中文视频教程更新中(原创),对Symfony感兴趣的学员可以看下
- MongoDB数据库操作---终端操作
- 将米转换为度(经纬度) 画圆上下多出来一些区域
- 知道半径 两点角度 怎么求坐标
- volley 框架简易封装使用
- ​​​​SSH Config Editor Pro :管理您的SSH配置文件
- Java基础知识笔记第八章:常用的实体类
- 深入了解-微信开发者工具
- python学习笔记之读取pdf文件库pdfplumber(一)
- kali Linux渗透测试教程.pdf
- 蓝桥杯 -罗马数字问题
- matlab人口数据,matlab中国人口
- Java高并发编程中Phaser的使用及详细介绍-刘宇
- 以梦为马,扬帆起航,双非人的2021,万字逐梦旅
- 巴拿赫空间的基本概念
- 【蓝桥杯】水题 基础练习 回文数 c语言