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流(二)字符流的更多相关文章

  1. Java提高篇(二):IO字节流、字符流和处理流

    在我们的Java语言当中,通常会有对文件进行读写,因此我们引入java的IO类来进行文件的读写. 一.字节流 下面是一个字节流的实例: import java.io.*; public class I ...

  2. java IO流 之 字符流

    字符是我们能读懂的一些文字和符号,但在计算机中存储的却是我们看不懂的byte 字节,那这就存在关于字符编码解码的问题.所以在学习Io流的字符流前我们先了解些关于编码问题. 一.字符集与字符编码 1.什 ...

  3. JAVA IO 字节流与字符流

    文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节.     ...

  4. JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习

    JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了 ...

  5. io系列之字符流

    java中io流系统庞大,知识点众多,作为小白通过五天的视频书籍学习后,总结了io系列的随笔,以便将来复习查看. 本篇为此系列随笔的第一篇:io系列之字符流. IO流 :对数据的传输流向进行操作,ja ...

  6. JAVA之IO流(字符流)

    字符流InputStreamReader和OutputStreamWriter是Writer和Read的子类:是字节流通向字符流的桥梁,也就是可以把字节流转化为字符流. InputStreamRead ...

  7. java io流(字符流) 文件打开、读取文件、关闭文件

    java io流(字符流) 文件打开 读取文件 关闭文件 //打开文件 //读取文件内容 //关闭文件 import java.io.*; public class Index{ public sta ...

  8. Java IO 字节流与字符流 (五)

    Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中.而字 ...

  9. (19)IO流之字符流FileReader和FileWriter,缓冲字符流---缓冲输入字符流BufferedReader和缓冲输出字符流BufferedWriter

    字符流,读取的文件是字符的时候,有两个基类一个是Reader,一个是Writer这有点拟人的感觉,人直接看懂的是文字 字符流 字节流:读取的是文件中的二进制字节流并不会帮你转换成看的懂得字符 字符流: ...

  10. [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)

    一.概念 ------->1.BufferedReader/BufferedWriter [参考19.03.31文章] *Reader/Writer-------->2.InputStre ...

随机推荐

  1. JUnit4简易教程

    1.下载JUnit4的jar包,在项目上右键选properties->Java Build Path ->Libraries->Add library添加刚才的jar包 2.在项目中 ...

  2. android AlertDialog.Builder(Context context)换行

    今天无意中发现AlertDialog的 setMessage(String)的换行问题,很多人都说\n可以,不过的却原来就在java里面写好的是可以换行 ,但是如果这个string是在网页或者是其地方 ...

  3. shell脚本参数中有空格

    shell脚本参数中有空格 在shell脚本中如果有空格的处理如下: sh test.sh "hello word" echo $1 得到的是hello,而不是hello word ...

  4. Java50道经典习题-程序9 求完数

    题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. public class Prog9 { public stati ...

  5. 打开win8及以上操作系统的系统已安装程序目录

    Windows 8 的“Metro 界面”里不能像XP和Win7那样,点击“开始”->“程序”,显示系统所有安装的程序,这个功能还是非常有用的,可以帮助我们快速查看系统已经安装的程序!我编写了这 ...

  6. 如何成功导入SlidingMenu库?

    SlidingMenu是一个开源的侧滑菜单(https://github.com/jfeinstein10/SlidingMenu).  为大家的安卓程序提供侧滑菜单,这个功能也非常有用. 要想正常使 ...

  7. C# 未安装Office环境下使用NPOI导出Excel文件

    1.NuGet直接安装NPOI程序包: 2. using NPOI.XSSF.UserModel; 3.导出Excel代码: private void TsbExport2ExcelClick(obj ...

  8. ROS初次实践(小海龟)

    启动ROS Master 启动小海龟仿真器 启动海龟控制节点(方向键控制海龟运动) rqt_graph可视化工具 /rosout节点必须存在,订阅所有节点的日志信息. 当前系统当中存在的节点. 了解当 ...

  9. 用css做出来一个三角形

    用css做出来一个三角形      <!--不设置宽高  转换行内块  边线设置成宽度-->       <div class="triangle"> 三角 ...

  10. linux下查找命令总结

    查找命令总结,which,whereis,find,locate,type http://blog.csdn.net/jessica1201/article/details/8139249   1.f ...