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

       五字符流的使用

       (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类的方法:

JavaSE入门学习45:文件传输基础之I/O流(四)_第1张图片

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

       OutputStreamWriter类的方法:

JavaSE入门学习45:文件传输基础之I/O流(四)_第2张图片

       实例代码:

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();
	}
}

       运行结果:

JavaSE入门学习45:文件传输基础之I/O流(四)_第3张图片

JavaSE入门学习45:文件传输基础之I/O流(四)_第4张图片

       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类的方法:

JavaSE入门学习45:文件传输基础之I/O流(四)_第5张图片

       BufferedWriter类的方法:

JavaSE入门学习45:文件传输基础之I/O流(四)_第6张图片

       PrintWriter类的方法:

JavaSE入门学习45:文件传输基础之I/O流(四)_第7张图片


JavaSE入门学习45:文件传输基础之I/O流(四)_第8张图片

       实例:

import java.io.*;

public class BrAndBwOrPwDemo {
	public static void main(String[] args) throws IOException{
		//对文件进行读写操作 
		BufferedReader br = new BufferedReader(new InputStreamReader(new
FileInputStream("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();
	}
}

       运行结果:  


       

你可能感兴趣的:(java,java,JavaSE,IO流,文件传输,IO流基础)