java I/O 学习(二)

字符流

java将流按照读写单位分为:字节流与字符流.
字节流:以字节为单位读写,一次最少读写8位2进制.
字符流:以字符为单位读写数据,实际读写字节量由 指定的字符集与读写的字符数据有关,但是在java 内部表示字符时都是用char表示的(2字节).
java.io.Writer,java.io.Reader两个类是抽象类,是所有字符输出流与字符输入流的超类,里面规定了读写字符的相关方法.

/ * java.io.OutputStreamWriter
 * java.io.InputStreamReader
 * 转换流,它们是字符流的一对常用实现类,是一对高级 流.
 * 实际开发中我们在读写文本数据时,流连接中经常
 * 会使用到转换流,它们是流连接中重要的一环,但是
 * 我们不会直接操作这对流.
 */
public class OSWDemo {
	public static void main(String[] args) throws IOException {
		FileOutputStream fos= new FileOutputStream("osw.txt");
		/*
		 * 转换流在创建时通过指定第二个参数来确定
		 * 字符集.这样通过当前流写出的文本数据都会
		 * 按照该字符集转换为字节后再做写出
		 */
		OutputStreamWriter osw= new OutputStreamWriter(fos,"GBK");
		osw.write("时间好不经用,抬头已是半生~");
		System.out.println("写出完毕!");
		osw.close();
	}
}

通常java中其他的高级字符流都只能连接在其他字符流上,都不能直接连接字节流.但是转换流是可以连接在字节流上的,而本身又是字符流,这样就可以让其他的字符流与字节流衔接了,起到了"转换器"的作用.

public class ISRDemo {
	public static void main(String[] args) throws IOException {
		FileInputStream fis= new FileInputStream("./src/io/ISRDemo.java");
		InputStreamReader isr= new InputStreamReader(fis);
		int d = -1;
		while((d = isr.read())!=-1) {
			System.out.print((char)d);
		}
		isr.close();
	}
}

java.io.BufferedWriter
java.io.BufferedReader

是缓冲字符输出与输入流,是一对高级流内部有缓冲区,读写文本数据效率高.
java.io.PrintWriter
内部总是连接BufferedWriter作为缓冲加速使用 并且PW还支持自动行刷新功能,开发比较常用

public class PWDemo{
	public static void main(String[] args) throws IOException {
		FileOutputStream fos= new FileOutputStream("pw2.txt");
		OutputStreamWriter osw= new OutputStreamWriter(fos,"GBK");
		BufferedWriter bw= new BufferedWriter(osw);
		PrintWriter pw= new PrintWriter(bw);
		pw.println("你好");
		pw.println("再见");
		System.out.println("写出完毕!");
		pw.close();
	}
}

public class PWDemo2 {
	public static void main(String[] args) throws IOException {
		/*
		 * PrintWriter提供了对文件直接写操作的构造器
		 * PrintWriter(File file)
		 * PrintWriter(String path)
		 * 并且以上两种构造器还支持一个重载,第二个参数
		 * 为字符集的名称,这样可以按照指定的字符集写出
		 * 文本数据.
		 */
		PrintWriter pw= new PrintWriter("pw.txt","GBK");
		pw.println("若非生活所迫,谁愿把自己弄的一身才华~~~");
		System.out.println("写出完毕!");
		pw.close();
	}
}

java.io.BufferedReader
缓冲字符输入流:块读数据效率高,并且可以按行读取字符串.

public class BRDemo {
	public static void main(String[] args) throws IOException {
		FileInputStream fis= new FileInputStream("./src/io/BRDemo.java");		
		InputStreamReader isr= new InputStreamReader(fis);		
		BufferedReader br= new BufferedReader(isr);
		String line = null;
		/*
		 * String readLine()
		 * 返回一行字符串,缓冲流会将一行字符串(到
		 * 换行符"\n"为止,但不包含该"\n")的内容
		 * 返回.若返回值为null则表示流已经读取到了
		 * 末尾.
		 */
		while((line = br.readLine())!=null) {
			System.out.println(line);
		}		
		br.close();	
	}
}

路漫漫其修远兮~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值