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) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...
随机推荐
- linux系统下安装redis以及java调用redis
关系型数据库:MySQL Oracle 非关系型数据库:Redis 去掉主外键等关系数据库的关系性特性 1)安装redis编译的c环境,yum install gcc-c++ 2)将redis-2. ...
- API网关-Ocelot概述
这个框架的整体思路其实就是Redirect请求并且附带一个简易的负载均衡机制,完全搭建MVC Core项目下在Ocelot项目启动的时候需要配置所有的ReRoute集合,这里的每一个ReRoute可以 ...
- EBS五种安全性屏蔽解析
http://blog.11equals3.top/2018/02/09/190/ 分类帐集 定义: 分类帐集顾名思义就是分类账的集合.它是总帐提供的将相同科目表和相同日历的多个分类帐集合一起用于多分 ...
- jquery mobile Touch事件
Touch事件在用户触摸屏幕(页面)时触发 1.jquery mobile tap tap事件在用户敲击某个元素时触发 $("p").on("tap",fucn ...
- Xftp5软件使用详解
一.首先运行Xftp5,然后导航栏上面有个小加号,点击进去. 二.接着出现如下界面,在这里填写名称(这个随意填写),主机填写要连接的主机的IP地址,然后协议的话,Linux系统一般选择SFTP协议,端 ...
- ActiveMQ 的安装与使用
消息中间件简介 消息中间件(MOM:Message Orient middleware) 消息中间件有很多的用途和优点: 1. 将数据从一个应用程序传送到另一个应用程序,或者从软件的一个模块传送到另外 ...
- redis订阅关闭异常解决
redis订阅关闭异常解决 应用程序模块订阅redis运行一段时间出现一直重连Redis服务,日志如下: 2019-04-28 10:06:17,551 ERROR org.springframewo ...
- 第64节:Java中的Spring Boot 2.0简介笔记
Java中的Spring Boot 2.0简介笔记 spring boot简介 依赖java8的运行环境 多模块项目 打包和运行 spring boot是由spring framework构建的,sp ...
- HystrixCommand实战
1. HystrixCommand实战 1.1. 需求 由于前端公共调用入口接口代码,封装在单独的jar包,它不属于springCloud管理,所以不适合用注解的方式@HystrixCommand进行 ...
- 远程桌面连接:出现身份验证错误,要求的函数不受支持,可能是由于CredSSP加密Oracle修正的解决方法
在做app时需要连接服务器来进行数据交互,但是在阿里云页面里连接服务器太不好用,所以使用windows自带的远程连接来进行. 一.但是连接的过程中出现了以下问题: 二.最初是有点迷茫的,不知道从哪里下 ...