Java基础IO流(三)字符流
字符流:
文本和文本文件:
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)文件是byte byte byte....的数据序列,而文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果。
字符流(Reader Writer) ------> 操作的是文本文件;一次处理一个字符;字符的底层仍然是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析
OutputStreamWriter 提供char流到byte流,按照编码处理
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileInputStream in = new FileInputStream("D:\\my\\studyWorkSpace\\java\\test.txt");
InputStreamReader isr = new InputStreamReader(in);//默认项目的编码,将来操作的时候,要写文件本身的编码格式
/*
int c;
while((c = isr.read()) != -1){
System.out.print((char)c);
}*/
/*
* 批量读取,放入buffer这个字符数组,从第0个位置开始放置,最多放buffer.length个
*返回的是读到的字符的个数
*/
char[] buffer = new char[8 * 1024];
int len;
while((len = isr.read(buffer,0,buffer.length)) != -1){
String s = new String(buffer,0,len);
System.out.println(s);
}
}
心得:以字符为单位进行拷贝,和字节流用法差不多,主要是考虑编码格式。
FileReader,FileWriter
注意:FileReader读出的时候,按照项目默认编码读的,如果文件和项目默认编码不一致,那就只能用InputStreamReader来转码读取了。
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
FileReader fr = new FileReader("D:\\my\\studyWorkSpace\\java\\test.txt");
FileWriter fw = new FileWriter("D:\\my\\studyWorkSpace\\java\\test1.txt");
char[] buffer = new char[2056];
int c;
while((c = fr.read(buffer,0,buffer.length)) != -1){
fw.write(buffer,0,c);
fw.flush();
}
fr.close();
fw.close();
}
字节流的过滤器:
BufferedReader ---》readLine 一次读一行
BufferedWriter/PrintWriter ----》写一行
public static void main(String[] args) throws IOException{
//对文件进行读写操作
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\my\\studyWorkSpace\\java\\test.txt")));
/*BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\\my\\studyWorkSpace\\java\\test2.txt")));*/
PrintWriter pw = new PrintWriter("D:\\my\\studyWorkSpace\\java\\test3.txt");
String line;
while((line = br.readLine()) != null){
System.out.println(line);//一次读一行,并不能识别换行(读的时候不识别换行符,一行一行读,一行一行的数据输出,但是没有输出换行符,没有手动换行的话所有数据会在一行输出)
/*bw.write(line);
//单独写出换行操作
bw.newLine();//换行操作
bw.flush();*/
pw.println(line);
pw.flush();
}
br.close();
/*bw.close();*/
pw.close();
}
行号追踪LineNumberReader
public static void main(String[] args)throws IOException {
FileReader fr = new FileReader("D:\\my\\studyWorkSpace\\java\\test.txt");
PrintWriter pw = new PrintWriter("D:\\my\\studyWorkSpace\\java\\testlr.txt");
LineNumberReader lr = new LineNumberReader(fr);
//每一行的字符串
String line = null;
//当读到的内容不是空的时候
while((line = lr.readLine()) != null){
//每一行前面加上行号,并且换行输出
pw.println(lr.getLineNumber() + ":" + line);
pw.flush();
}
lr.close();
pw.close();
}
Java基础IO流(三)字符流的更多相关文章
- JAVA基础之字节流与字符流
个人理解: IO流就是将数据进行操作的方式,因为编码的不同,所以对文件的操作就产生两种.最好用字节流,为了方便看汉字等,(已经确定文字的话)可以使用字符流.每个流派也就分为输入和输出,这样就可以产生复 ...
- java基础(23):字节流、字符流
1. 字节流 在前面的学习过程中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现在我们就要开始给文件中写数据,或者读取文件中的数据. 1.1 字节输出流OutputStream Out ...
- 【Java基础】【21IO(字符流)&字符流其他内容&递归】
21.01_IO流(字符流FileReader) 1.字符流是什么 字符流是可以直接读写字符的IO流 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写 ...
- Java基础IO类之字符串流(查字符串中的单词数量)与管道流
一.字符串流 定义:字符串流(StringReader),以一个字符为数据源,来构造一个字符流. 作用:在Web开发中,我们经常要从服务器上获取数据,数据返回的格式通常一个字符串(XML.JSON), ...
- Java文件(io)编程——文件字符流的使用
案例1: 读取一个文件并写入到另一个文件中,char[] 来中转. 首先要在E盘下创建一个文本文档,命名为test.txt,输入一些字符串. public class Demo_5 { public ...
- Java基础——iO(三)
一.管道流 演示:PipedInputStream , PipedOutputStream 注意:管道流本身就不建议在一个线程中使用,这是因为向输出流中写的数据,都会存到输入流内部的一个1024字节 ...
- Java基础IO类之缓冲流
首先要明确一个概念: 对文件或其他目标频繁的读写操作,效率低,性能差. 使用缓冲流的好处是:能够高效的读写信息,原理是先将数据先缓冲起来,然后一起写入或者读取出来. 对于字节: BufferedInp ...
- Java基础IO类之打印流
package IODemo; import java.io.*; /* 打印流 : 很方便的进行输出 字节打印流 增强输出功能 字符打印流 */ public class PrintStreamDe ...
- Java基础IO类之对象流与序列化
对象流的两个类: ObjectOutputStream:将Java对象的基本数据类型和图形写入OutputStream ObjectInputStream:对以前使用ObjectOutputStrea ...
- Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)
Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...
随机推荐
- windows10的环境变量path如何列表显示
如果你的变量值以%开头,打开编辑的时候就会显示一串的变量值,不方便查找编辑 所以将变量值更改为以盘符开始,就可以解决这个问题,比如:D:\WorkSoft\app\product\11.2.0\dbh ...
- 背水一战 Windows 10 (104) - 通知(Toast): 纯文本 toast, 短时 toast, 长时 toast, 图文 toast
[源码下载] 背水一战 Windows 10 (104) - 通知(Toast): 纯文本 toast, 短时 toast, 长时 toast, 图文 toast 作者:webabcd 介绍背水一战 ...
- 64位 windows10,MYSQL8.0.13重置密码(忘记密码或者无法登录)
上一节的MySQL的配置安装里,并没有用到配置文件my.ini.那在MYSQL8.0.13如何解决密码重置问题呢.我去网上搜了好多的资料都是改配置文件my.ini的,后来终于找到了一条命令:操作步骤如 ...
- 腾讯开源 MMKV — 基于mmap的高性能通用key-value组件
一.介绍 MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强.从 2015 年中至今,在 iOS 微信上使用已有近 3 ...
- 吴恩达机器学习笔记7-梯度下降III(Gradient descent intuition) --梯度下降的线性回归
梯度下降算法和线性回归算法比较如图: 对我们之前的线性回归问题运用梯度下降法,关键在于求出代价函数的导数,即: 我们刚刚使用的算法,有时也称为批量梯度下降.实际上,在机器学习中,通常不太会给算法起名字 ...
- Python学习笔记【第十四篇】:Python网络编程二黏包问题、socketserver、验证合法性
TCP/IP网络通讯粘包问题 案例:模拟执行shell命令,服务器返回相应的类容.发送指令的客户端容错率暂无考虑,按照正确的指令发送即可. 服务端代码 # -*- coding: utf- -*- # ...
- RocketMQ入门手册
前言 继我上一篇博客后 分布式消息队列RocketMQ学习教程① 上一篇博客最主要介绍了几种常用的MQ,所以本博客再简单介绍一下RocketMQ的原理和简单的例子,基于Java实现,希望可以帮助学习者 ...
- 快速熟悉Matlab
一 获取数组长度: d = size(X) [m,n] = size(X) m = size(X,dim) [d1,d2,d3,...,dn] = size(X) 二 注释和取消注释. 点击ctrl ...
- 朴素贝叶斯算法简介及python代码实现分析
概念: 贝叶斯定理:贝叶斯理论是以18世纪的一位神学家托马斯.贝叶斯(Thomas Bayes)命名.通常,事件A在事件B(发生)的条件下的概率,与事件B在事件A(发生)的条件下的概率是不一样的:然而 ...
- mysql 开发进阶篇系列 54 权限与安全(账号管理的各种权限操作 下)
1. 查看权限 -- 如果host值不是%, 就要加上host值,下面查看bkpuser用户权限(6个权限, 限本地连接) SHOW GRANTS FOR bkpuser@localhost; -- ...