JavaSE入门学习45:文件传输基础之I/O流(四)

来源:互联网 发布:圣元 淘宝网折 编辑:程序博客网 时间:2024/05/16 19:02

       五字符流的使用

       (1)编码问题

       这个问题我们早就说过了,不再过多赘述。

       参考:JavaSE入门学习42:文件传输基础之I/O流(一)

       (2)认识文本和文本文件

       Java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码);而文件是byte byte byte ...的数据

;文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk等)序列化为byte的存储结果。

       (3)字符流(Reader Writer)---->操作的是文本文本文件

       字符的处理,一次处理一个字符。

       字符的底层任然是基本的字节序列。

       (4)字符流的基本实现

       1)InputStreamReader类和OutputStreamWriter类

       InputStreamReader类是完成byte流解析为char流,按照编码解析。

       InputStreamReader类的方法:


       OutputStreamWriter类是提供char流到byte流,按照编码处理。  

       OutputStreamWriter类的方法:


       实例代码:

import java.io.*;public class IsrAndOswDemo{public static void main(String[] args) throws IOException {FileInputStream in = new FileInputStream("E:\\Java\\JavaSE\\IO\\testutf8.txt");InputStreamReader isr = new InputStreamReader(in);//默认项目的编码,操作的时候,要写文件本身的格式        //InputStreamReader isr = new InputStreamReader(in,"gbk");FileOutputStream out = new FileOutputStream("E:\\Java\\JavaSE\\IO\\testutf81.txt");OutputStreamWriter osw = new OutputStreamWriter(out);//int c;//while((c = isr.read())!=-1){//System.out.print((char)c);//}char[] buffer = new char[8*1024];int b;/* *批量读取,放入buffer这个字符数组,从第0个位置开始放置,最多放buffer.length个 *返回的是读到的字符的个数*/while(( b = isr.read(buffer,0,buffer.length))!=-1){String s = new String(buffer,0,b);System.out.print(s);osw.write(buffer,0,b);osw.flush();}isr.close();osw.close();}}

       运行结果:



       2)FileReader类和FileWriter类

       FileReader类用来读取字符文件的便捷类。

       FileWriter类用来写入字符文件的便捷类。

       FileReader类和FileWriter类中的方法都是来自继承的方法,并没有自己独有的方法。

       实例代码:

import java.io.*;public class FrAndFwDemo {public static void main(String[] args) throws IOException{                 //采用的是默认编码格式,这里并不能指定编码格式FileReader fr = new FileReader("E:\\Java\\JavaSE\\IO\\test.txt");FileWriter fw = new FileWriter("E:\\Java\\JavaSE\\IO\\test2.txt");//继续在后面追加内容//FileWriter fw = new FileWriter("E:\\Java\\JavaSE\\IO\\test2.txt",true);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();}}

       运行结果:


       (5)字符流的过滤器

       BufferedReader类---->readLine 一次读一行

       BufferedReader类从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。可以指定缓

冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

       BufferedWriter/PrintWriter类---->写一行  

       BufferedWriter类将文本写入字符输出流,缓冲各个字符,从而实现字符、数组和行的高效读取。

       PrintWriter类向文本输出流打印对象的格式化表示形式。

       BufferedReader类的方法:


       BufferedWriter类的方法:


       PrintWriter类的方法:




       实例:

import java.io.*;public class BrAndBwOrPwDemo {public static void main(String[] args) throws IOException{//对文件进行读写操作 BufferedReader br = new BufferedReader(new InputStreamReader(newFileInputStream("E:\\Java\\JavaSE\\IO\\test.txt")));//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("E:\\Java\\JavaSE\\IO\\test3.txt")));PrintWriter pw = new PrintWriter("E:\\Java\\JavaSE\\IO\\test4.txt");//PrintWriter pw1 = new PrintWriter(outputStream,boolean autoFlush);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();}}

       运行结果:  


       

2 0
原创粉丝点击