java基础io流之字符流的变革

字符流的诞生:

转换流已经是字符流了,但是他们的名字太长了,Java就提供了其子类供我们使用。

FileWriter 、FileReader 继承了其父类的所有方法。

java基础io流之字符流的变革

字符流=字节流+编码表

OutputStreamWriter = FileOutputStream + 编码表(GBK)

FileWriter = FileOutputStream + 编码表(GBK)

InputStreamReader = FileInputStream + 编码表(GBK)

FileReader = FileInputStream + 编码表(GBK)

复制改写:

FileWriter fw = new FileWriter("e:\b.txt");
FileReader fr = new FileReader("b.txt");
char[] chars =new char[1024];
int len = 0;
while ((len = fr.read(chars)) != -1) {
 fw.write(chars,0,len);
 fw.flush();
}
fw.close();
fr.close();
/**
 * 总结,到现在为止,加上字节流,复制文本的方式有8种,但是复制图片视频等文件只有四种字节流的方式,因    
   为不能用字符流复制图片视频mp3等
 */

字符流学习前辈字节流的经验,也设计了字符缓冲流。

BufferedReader、

BufferedWriter

和字节缓冲流的设计基本一样,也有两个构造方法,但是我们只要默认的缓冲大小的构造方法就可以了。

java基础io流之字符流的变革

用字符缓冲流改写复制功能:

BufferedReader br = new BufferedReader(new FileReader("c.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("e:\d.txt"));
char[] chars = new char[1024];
int len = 0 ;
while ((len = br.read(chars)) != -1) {
     bw.write(chars,0,len);
     bw.flush();
}
br.close();
bw.close();

然而字符缓冲流还有自己特殊的读写功能。

BufferedWriter :void newLine() 换行

BufferedReader :String readLine() 读一行数据

public static void main(String args[]) throws IOException {
     // write();
     read();
}
private static void read() throws IOException {
     BufferedReader br = new BufferedReader(new FileReader("bw.txt"));
     String line = null;
     while ((line = br.readLine()) != null) {
     System.out.println(line);
     //readLine不会读取换行符
     //读到末尾返回null
    }
     br.close();
}
private static void write() throws IOException {
     BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
         for (int i = 0; i <10 ; i++) {
             bw.write("你好哈哈哈哈哈");
             bw.newLine();//换行,并且自动检测不同系统的换行符
             bw.flush();
             //一般三个连用
         }
         bw.close();
}
 

用字符缓冲流的特殊方式升级复制功能:

BufferedReader br = new BufferedReader(new FileReader("bw.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("e:\bw.txt"));
String line = null;
while ((line = br.readLine()) != null) {
     bw.write(line);
     bw.newLine();
     bw.flush();
}
bw.close();
br.close();
 //总结 字符流复制文本有5种方式

字符流的基础基本就聊完了,还有一个比较常用的类LineNumberReader

查看源码可知LineNumberReader继承自BufferedReader,并且增加了行号的操作。

LineNumberReader lnr = new LineNumberReader(new FileReader("a.txt"));
String line = null;
while ((line = lnr.readLine()) != null) {
 System.out.println(lnr.getLineNumber()+":"+line);
}
1:A
2:S
3:F

但是LineNumberWriter。源码很简单,更多的操作请看源码。

io流总结:

java基础io流之字符流的变革

java 中文api :

http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

查看api源码,深入理解io设计理念。

好了,本篇文章就分享到这里了。有兴趣的新手伙伴们可以关注收藏起来,以后需要的时候可以多看看。如果有正在学java的程序员,可来我们的java技术学习扣qun哦:59789,1510里面免费送java的视频系统教程!

猜你喜欢

转载自blog.csdn.net/weixin_43660525/article/details/86507585