JAVA基础——IO流字符流
字符流
字节流提供了处理任何类型输入/输出操作的功能(因为对于计算机而言,一切都是0和1,只需把数据以字节形式表示就够了),但它们不可以直接操作Unicode字符,因为上一篇文章写了,一个Unicode字符占用2个字节,而字节流一次只能操作一个字节。既然Java的口号就是"一次编写、处处运行",那么包含直接的字符输入/输出的支持是必要的。因此就有一些字符输入/输出流,之前已经说明过了,字符流顶层是Reader和Writer这两个抽象类,因此就从这里开始本文。
Reader
Reader是定义Java的字符输入流的抽象类,该类的所有方法在出错的情况下都将引发IOException。Reader类中有这些方法:
| 方 法 | 作 用 |
| abstract void close() | 关闭该流并释放与之关联的所有资源 |
| void mark(int readAheadLimit) | 标记流中的当前位置 |
| boolean markSupported() | 判断此流是否支持mark()操作 |
| int read() | 从文件中读取单个字符 |
| int read(char[] cbuf) | 从文件中读取字符到cbuf |
| abstract int read(char[] cbuf, int off, int len) | 将文件中的字符读入cbuf数组,从off位置开始,读取len个字符。三个read方法在字符可用、发生I/O异常或者已经到达流的末尾前,此方法会一直阻塞 |
| int read(CharBuffer target) | 试图将文件中的字符读入指定的字符缓冲区 |
| boolean ready() | 判断是否准备读取此流 |
| voi reset() | 重置该流 |
| long skip(long n) | 跳过n个字符 |
Writer
Writer是定义字符输出流的抽象类,所有该类的方法都返回一个void值并在出错的条件下引发IOException。Writer类中的方法有:
| 方 法 | 作 用 |
| Writer append(char c) | 将制定字符添加到此writer |
| Writer append(CharSequence csq) | 将制定字符序列添加到此writer |
| Writer append(CharSequence csq, int start, int end) | 将指定字符序列的子序列添加到此writer.Appendable |
| abstract void close() | 关闭此流,但要先flush()它 |
| abstract void flush() | 刷新该流的缓冲 |
| void write(char[] cbuf) | 将cbuf中的内容写入文件 |
| abstract void write(char[] cbuf, int off, int len) | 将字符数组cbuf中从off开始的len个字节写入文件 |
| void write(int c) | 写入单个字符到文件中 |
| void write(String str) | 写入字符串到文件中 |
| void write(String str, int off, int len) | 写入str从off位置开始的len个字符到文件中 |
FileReader和FileWriter
FileReader类创建了一个可以读取文件内容的Reader类,最常用的构造方法是:
1、FileReader(String fileName)
2、FileReader(File file)
FileWriter创建了一个可以写文件的Writer类,最常用的构造方法是:
1、FileWriter(String fileName)
2、FileWriter(String fileName, boolean append)
3、FileWriter(File file)
其中第二个构造方法,如果append为true,那么输出是追加到文件结尾的。FileWriter类的创建不依赖文件是否存在,在创建文件之前,FileWriter将在创建对象时打开它来作为输出。如果试图打开一个只读文件,那么将引发一个IOException。看一下FileWriter和FileReader的使用,现在D盘目录下没有"writer.txt":


public static void main(String[] args) throws Exception
{
File file = new File("D:/writer.txt");
Writer out = new FileWriter(file);
// 声明一个String类型对象
String str = "Hello World!!!";
out.write(str);
out.close(); // 读文件操作
Reader in = new FileReader(file);
// 开辟一个空间用于接收文件读进来的数据
char c0[] = new char[1024];
int i = 0;
// 将c0的引用传递到read()方法之中,同时此方法返回读入数据的个数
i = in.read(c0);
in.close(); if (-1 == i)
{
System.out.println("文件中无数据");
}
else
{
System.out.println(new String(c0, 0, i));
}
}


利用FileWriter和FileReader进行了一次的读写操作,先看一下D盘下是否有"writer.txt",假如有"writer.txt"那"writer.txt"中又是什么:

看来利用FileWriter写入一个内存中的字符串到文件中是成功了,那么利用利用FileReader读入文件中的内容到内存呢,看一下运行结果:
Hello World!!!
打印结果和文件中的内容一致,说明FileReader的操作也成功。
这就是FileWriter和FileReader的使用,和FileOutputStream和FileInputStream的使用差不多,不过实际操作中一般不会用FileWriter和FileReader
JAVA基础——IO流字符流的更多相关文章
- Java 基础-IO、stream 流、文件操作
输入输出流的分类 在 java.io 包中,包含了输入输出操作所需的类. I/O 流可以安装不同的标准分类: 按照流的方向分类: 输入流:将信息从代码外部输入代码 输出流:将代码得到的数据输出到文件. ...
- Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)
Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...
- Java基础-IO流对象之字符类(FileWrite与FileReader)
Java基础-IO流对象之字符类(FileWrite与FileReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常见编码简介 1>ASCII 我们知道计算机是 ...
- Java基础-IO流对象之随机访问文件(RandomAccessFile)
Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...
- Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)
Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...
- Java基础-IO流对象之打印流(PrintStream与PrintWriter)
Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...
- java基础-IO流对象之Properties集合
java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...
- Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)
Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...
- Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter)
Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.转换流概述 我们之前 ...
- Java基础-IO流对象之File类
Java基础-IO流对象之File类 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.IO技术概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下 ...
随机推荐
- Gerrit代码Review实战
代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略.在实践中,给大家推荐一款免费.开放源代码的代码审查软件Gerri ...
- Java 学习路线建议
在大家看之前,我要先声明两点.1.由于我本人是Java后端开发出身,因此所推荐的学习内容是Java Web和Java后端开发的路线,非Java Web和Java后端开发的同学请适当参考其学习思想即可, ...
- Windows JDK 1.8降级为1.7方法
转自:https://www.aliyun.com/jiaocheng/890626.html 正常情况下,JDK的升降级只需更改环境变量即可 可是到了1.8版本,Oracle使了一点小手段, 在系统 ...
- 【179】IDL 读写 NetCDF 文件
NetCDF(network Common Data Form)由位于科罗拉多州波尔市的 Unidata 程序中心开发,主要应用于大气科学的研究.NetCDF 的数据模式具有简单性和灵活性的特点.Ne ...
- undefined reference to 'pthread_create'问题解决(转载)
转自:http://blog.csdn.net/llqkk/article/details/2854558 由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个例子 ...
- jsonp处理跨域
什么是跨域? 简单的来说,出于安全方面的考虑,页面中的JavaScript无法访问其他服务器上的数据,即“同源策略”.而跨域就是通过某些手段来绕过同源策略限制,实现不同服务器之间通信的效果. 具体策略 ...
- bzoj 4785: [Zjoi2017]树状数组【树套树】
参考:https://www.cnblogs.com/ljh2000-jump/p/6686960.html 由于操作反过来了,所以显然树状数组维护后缀和,所以本来想查询(1,r)-(1,l-1),现 ...
- MYSQL 配置远程连接
例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话. GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY ...
- [POI2009]Tab
Description 2个n\(\times\)m矩阵,保证同一个矩阵中元素两两不同.问能否通过若干次交换两行或交换两列把第一个矩阵变成第二个. Input 第一行正整数T(1≤T≤10)表示数据组 ...
- ZooKeeper通过ACL修复未授权访问漏洞
默认情况下ZooKeeper允许匿名访问,因此在安全漏洞扫描中暴漏未授权访问漏洞. 一.参考资料 <ZooKeeper 笔记(5) ACL(Access Control List)访问控制列表& ...