IO流(二)字符流
1.字符流:在字节流的基础上添加了编码机制。很大程度上和字节流操作一样的,字符流只能操作文本类文件,准确的说应该是纯文本类文件。例如.txt,.java,.cpp,.html等
编码:每一个国家都有自己的编码,编码不一致往往导致的结果就是!!乱码!!。中国编码的编码:gbk
gbk:英文字母:1个字节,中文:2个字节,系统的默认编码。
unicode:统一编码。中文还是英文字母都是占2个字节。
utf-8: 国际编码。英文占1个字节,中文占3个字节。
文件是用什么编码来写的,那么就用什么编码来读取。最常用的编码是gbk和utf-8.一般的情况下,都设置为utf-8.(还有其他的很多编码:例如GB2312,big5等等)。如果想测试是否像上面所说那么多个字节的话,建议使用Notepad2文本软件,体积小功能强!(似乎再买广告了。。。)
Reader:读取数据
FileReader:文件读取字符流
BufferedReader://带缓冲区的字符输入流
readLine() ;读取一行数据
LineNumberReader;带行号.通过getLineNumber()方法获取行号
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader; /*LineNumberReader是BufferedReader的子类,
* 比BufferedReader多了设置行号和获取行号的功能。
* 使用LineNumberReader流读取文本文件,并打印在控制台上。
* 在每行的前面添加行号。
*/ public class LineNumberReaderDemo1 {
public static void main(String[] args) throws IOException {
LineNumberReader lnr = new LineNumberReader(new FileReader("e:\\io.txt"));
String str = null;
while((str = lnr.readLine()) != null){
// lnr.setLineNumber(90);//设置行号
System.out.print(lnr.getLineNumber()+" : ");
System.out.println(str);
}
lnr.close();
}
}
带行号功能的字符输入流
Writer:写入数据
FileWrite:写入数据,记得刷新。
BufferedWriter://带缓冲区的字符输出流
newLine():写入换行字符。
write(String str):写入字符串。
/*
* 2:用字符流复制文本文件。
*/
public static boolean copyText(String textPath, String targetPath){
boolean flag = false;
if(textPath==null || textPath.trim().equals("")){
return flag;
}
if(targetPath == null || targetPath.trim().equals("")){
int end = textPath.lastIndexOf(".");
String endStr = textPath.substring(end);//后缀名
int index = textPath.lastIndexOf("\\");
if(index == 0){
index = textPath.lastIndexOf("/");
}
targetPath = textPath.substring(0,end)+"2"+endStr;//新文件名
} BufferedReader br = null;
BufferedWriter bw = null;
try {
//字符输入流
FileReader fr = new FileReader(textPath);
br = new BufferedReader(fr);
//字符输出流
FileWriter fw = new FileWriter(targetPath);
bw = new BufferedWriter(fw); String str = "";
while((str=br.readLine()) != null){
bw.write(str);
bw.newLine();
bw.flush();
}
flag = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try{
bw.close();
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
return flag;
}
转换流:可带编码格式的流
InputStreamReader;字节转换为字符流
public class SystemReadDemo1 {
public static void main(String[] args) throws IOException {
//获取键盘输入
InputStream is = System.in;
//将字节流转换为字符流,用到InputStreamReader(InputStream in)---转换流
InputStreamReader isr = new InputStreamReader(is,"utf-8");
//将字符流再转为带缓冲区的字符流
BufferedReader br = new BufferedReader(isr);
String str = null;
while(true){
str = br.readLine();
if("886".equals(str)){
break;
}
System.out.println(str);
}
br.close();
}
}
转换流示例
OutputStreamWriter ;字符流转换为字节流。
package com.java.homework; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException; /*
* 1:获取键盘录入的数据,将数据写到文件中,但是以utf-8编码的形式写到文件中去。
*/
public class HomeWork1 { public static void main(String[] args) {
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("e:\\aa.txt"), "utf-8")); String str = "";
while(true){
str = br.readLine();
if("exit".equals(str)){
//可以尝试不同的编码
OutputStreamWriter osw = new OutputStreamWriter(System.out, "GBK");
BufferedWriter bw2 = new BufferedWriter(osw);
bw2.write("输入结束!");
bw2.flush();
break;
}
bw.write(str);
bw.newLine();
bw.flush();
} } catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
bw.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
转换流示例二
IO流(二)字符流的更多相关文章
- Java提高篇(二):IO字节流、字符流和处理流
在我们的Java语言当中,通常会有对文件进行读写,因此我们引入java的IO类来进行文件的读写. 一.字节流 下面是一个字节流的实例: import java.io.*; public class I ...
- java IO流 之 字符流
字符是我们能读懂的一些文字和符号,但在计算机中存储的却是我们看不懂的byte 字节,那这就存在关于字符编码解码的问题.所以在学习Io流的字符流前我们先了解些关于编码问题. 一.字符集与字符编码 1.什 ...
- JAVA IO 字节流与字符流
文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节. ...
- JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习
JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了 ...
- io系列之字符流
java中io流系统庞大,知识点众多,作为小白通过五天的视频书籍学习后,总结了io系列的随笔,以便将来复习查看. 本篇为此系列随笔的第一篇:io系列之字符流. IO流 :对数据的传输流向进行操作,ja ...
- JAVA之IO流(字符流)
字符流InputStreamReader和OutputStreamWriter是Writer和Read的子类:是字节流通向字符流的桥梁,也就是可以把字节流转化为字符流. InputStreamRead ...
- java io流(字符流) 文件打开、读取文件、关闭文件
java io流(字符流) 文件打开 读取文件 关闭文件 //打开文件 //读取文件内容 //关闭文件 import java.io.*; public class Index{ public sta ...
- Java IO 字节流与字符流 (五)
Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中.而字 ...
- (19)IO流之字符流FileReader和FileWriter,缓冲字符流---缓冲输入字符流BufferedReader和缓冲输出字符流BufferedWriter
字符流,读取的文件是字符的时候,有两个基类一个是Reader,一个是Writer这有点拟人的感觉,人直接看懂的是文字 字符流 字节流:读取的是文件中的二进制字节流并不会帮你转换成看的懂得字符 字符流: ...
- [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)
一.概念 ------->1.BufferedReader/BufferedWriter [参考19.03.31文章] *Reader/Writer-------->2.InputStre ...
随机推荐
- [转]细说 ASP.NET Cache 及其高级用法
本文转自:http://www.cnblogs.com/fish-li/archive/2011/12/27/2304063.html 阅读目录 开始 Cache的基本用途 Cache的定义 Cach ...
- MFC中的一般经验之谈2
MFC一般类成员m_iAge,命名原则,且MFC中类定义以C开头原则,这些原则便于理解以及增强代码的可读性.MFC是一个用窗口作为用户交互的方式,一般框架类.视图类.以及窗口上的控件都是继承CWnd类 ...
- 由于没有公钥,无法验证下列签名 Ubuntu
问题:执行 apt-get update 时错误 W: GPG 错误:https://apt.dockerproject.org ubuntu-trusty InRelease: 由于没有公钥,无法验 ...
- .Net Core使用HttpClient请求Web API注意事项
HttpClient 使用HttpClient可以很方便的请求Web API,但在使用时有一些需要注意的地方,不然会给你的程序带来毁灭性的问题. HttpClient是一个继承了IDisposable ...
- WPF制作歌词动画
最近再做一个UWP的音乐播放器,今天实现了歌词动画,不是滚动的,滚动的慢慢研究 思路:在右边放了三个textBlock,设置 textBlock的effect属性 <TextBlock.Effe ...
- WPF定时刷新UI界面
代码: using NHibernate.Criterion; using System; using System.Collections.Generic; using System.Collect ...
- 【转】Sql Server去除所有空格
详细链接:https://shop499704308.taobao.com/?spm=a1z38n.10677092.card.11.594c1debsAGeak 1.普通空格: 前后的空格,使用LT ...
- Java多线程编程:Callable、Future和FutureTask浅析(多线程编程之四)
java多线程-概念&创建启动&中断&守护线程&优先级&线程状态(多线程编程之一)java多线程同步以及线程间通信详解&消费者生产者模式&死锁& ...
- 【题解】 BZOJ4548 小奇的糖果
本文同步在学弟ZCDHJ的个人博客发布,审核需要一段时间. 传送门 考虑题目中获得的糖果并不包含所有的颜色这句话,发现相当于我们可以直接选取某一个颜色强制不能选(这样子一定最优). 然后就可以考虑分开 ...
- Java50道经典习题-程序9 求完数
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. public class Prog9 { public stati ...