【JavaSE】day11_Reader和Writer_PrintWriter_BufferedReader

【JavaSE】day11_Reader和Writer_PrintWriter

1.Reader和Writer

1)Writer,Reader 字符输出,输入流的父类。

* 字符流特点:以字符为单位读写数据。

* 字符流只能读写文本数据。所以不要用字符流读取非文本文件。

* 字符流只是简化了我们对于字符串的读写操作不用自行在字节与字符之间转换。

* 所以字符流都是高级流,底层本质还是要用字节读写数据。

2)OutputStreamWriter

按照给定的字符集,将字符串转换为一组字节后写出。

代码:

<span style="font-size:18px;">package day03;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

/**
 * Writer,Reader 字符输出,输入流的父类。
 * 字符流特点:以字符为单位读写数据。
 * 字符流只能读写文本数据。所以不要用字符流读取非文本文件。
 * 字符流只是简化了我们对于字符串的读写操作不用自行在
 * 字节与字符之间转换。
 * 所以字符流都是高级流,底层本质还是要用字节读写数据。
 *
 */
public class OSWDemo {
	public static void main(String[] args) throws IOException {
		FileOutputStream fos = new FileOutputStream("osw.txt");

		/*
		 * 特点:
		 * 按照给定的字符集,将字符串转换为一组字节后写出。
		 */
		OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");

		String str = "//我爱java";

		/*
		 * 将给定的字符串转换为一组字节后写出。
		 */
		osw.write(str);

		osw.write("我爱北京天安门");

		osw.close();
	}

}
</span>

3)java.io.InputStreamReader

字符输入流,特点:可以按照指定的字符集读取字符。

代码:

<span style="font-size:18px;">package day03;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * java.io.InputStreamReader
 * 字符输入流
 * 特点:可以按照指定的字符集读取字符
 *
 */
public class ISRDemo {
	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("osw.txt");

		//为了方便读取字符,可以使用字符输入流
		InputStreamReader isr = new InputStreamReader(fis,"gbk");

		int d = -1;
		while((d=isr.read())!=-1){
			char c = (char)d;
			System.out.print(c);
		}

		isr.close();
	}

}
</span>

2.PrinterWriter

1)缓冲字符输出流:BufferedWriter

* 由于内部维护了一个字符数组作为缓冲区。所以写出字符串的效率高,而且还有一个特点就是可以以行为单位写出字符串。

* PrintWriter:具有自动行刷新功能的缓冲字符输出流.由于该流的缓冲功能是使用BufferedWriter实现的,并且其提供了更多功能,所以比较常用。创建PrintWriter时,其总是先创建BufferedWriter作为缓冲功能。

2)直接操作文件的构造方法

* PrintWriter(File file)

* PrintWriter(String pathName)

直接操作文件的这两个构造方法都支持第二个参数,就是指定字符集。

代码:

<span style="font-size:18px;">package day03;

import java.io.IOException;
import java.io.PrintWriter;

/**
 * 缓冲字符输出流:BufferedWriter
 * 由于内部维护了一个字符数组作为缓冲区。所以写出
 * 字符串的效率高,而且还有一个特点就是可以以行为
 * 单位写出字符串。
 *
 * PrintWriter:具有自动行刷新功能的缓冲字符输出流
 * 由于该流的缓冲功能是使用BufferedWriter实现的,
 * 并且其提供了更多功能,所以比较常用。
 * 创建PrintWriter时,其总是先创建BufferedWriter
 * 作为缓冲功能。
 *
 */
public class PWDemo {
	public static void main(String[] args) throws IOException {
		/*
		 * 直接操作文件的构造方法
		 * PrintWriter(File file)
		 * PrintWriter(String pathName)
		 *
		 * 直接操作文件的这两个构造方法都支持第二个参数,就是指定字符集。
		 */
		PrintWriter pw = new PrintWriter("pw.txt","GBK");

		pw.println("woaibeijingtiananmen");

		pw.println("我爱北京天安门");

		pw.close();
	}

}
</span>

3)PrintWriter可以处理其他流。

* 既可以处理字节流,也可以处理字符流。但是直接处理字节流的弊端在于,不能指定字符集。

* 当创建PrintWriter并处理其他流时: 即:构造方法的第一个参数为流

* 那么这些构造方法都支持第二个参数,是一个boolean值,当该值为true时,PrintWriter就具有自动行刷新功能。

<span style="font-size:18px;">package day03;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

/**
 * PrintWriter可以处理其他流
 * 既可以处理字节流,也可以处理字符流。
 * 但是直接处理字节流的弊端在于,不能指定字符集。
 *
 * 当创建PrintWriter并处理其他流时:
 * 即:构造方法的第一个参数为流
 * 那么这些构造方法都支持第二个参数,是一个boolean值,
 * 当该值为true时,PrintWriter就具有自动行刷新功能。
 *
 */
public class PWDemo2 {
	public static void main(String[] args) throws IOException {
		FileOutputStream fos = new FileOutputStream("pw1.txt");

		OutputStreamWriter osw = new OutputStreamWriter(fos,"GBK");

		/*
		 * 当第二个参数为true时,该PrintWriter就具有
		 * 自动行刷新功能,即:
		 * 每当调用println()方法时,将字符串写出后自动flush()
		 * 需要知道:自动行刷新会提高写出次数,降低写出
		 * 效率,但是可以提高写出的及时性。
		 */
		PrintWriter pw = new PrintWriter(osw,true);

		pw.println("我爱北京天安门");

		pw.close();

	}

}
</span>

3.java.io.BufferedReader

1)缓冲字符输入流

* 特点:需要处理一个字符流,并且可以以行为单位读取字符串。

2)String readLine()

* BufferedReader提供了该方法可以以行为单位读取字符串。

* 该方法会顺序读取若干字符,直到遇到换行符为止,然后将换行符之前的所有字符转换为一个字符串后返回。该字符串中不包含换行符!若返回值为null,表示读取到文件末尾。

代码:

<span style="font-size:18px;">package day03;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

/**
 * java.io.BufferedReader
 * 缓冲字符输入流
 * 特点:需要处理一个字符流,并且可以以行为单位
 * 读取字符串。
 *
 */
public class BRDemo {
	public static void main(String[] args) throws IOException {
		/*
		 * 读取当前源文件,并将内容输出到控制台
		 */
		FileInputStream fis = new FileInputStream(
							"."+File.separator+"src"+File.separator+
							"day03"+File.separator+"BRDemo.java"
							);
		InputStreamReader isr = new InputStreamReader(fis,"GBK");

		BufferedReader br = new BufferedReader(isr);

		PrintWriter pw = new PrintWriter("BRDemo.java","UTF-8");
		/*
		 * String readLine()
		 * BufferedReader提供了该方法可以以行为单位
		 * 读取字符串。
		 * 该方法会顺序读取若干字符,直到遇到换行符为止,
		 * 然后将换行符之前的所有字符转换为一个字符串后
		 * 返回。该字符串中不包含换行符!
		 * 若返回值为null,表示读取到文件末尾。
		 */
		String line = null;
		while((line=br.readLine())!=null){
			//System.out.println(line);
			pw.println(line);
		}

		pw.close();
		br.close();

	}

}
</span>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-18 21:24:33

【JavaSE】day11_Reader和Writer_PrintWriter_BufferedReader的相关文章

JavaSE入门学习21:Java面向对象之接口(interface)(二)

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

JavaSE基础之JDBC

JavaSE基础之JDBC 1.JDBC 的步骤: ①加载数据库驱动: a.MySQL:com.mysql.jdbc.Driver: b.SQLServer:com.microsoft.jdbc.sqlserver.SQLServerDriver: c.Oracle:oracle.jdbc.driver.OracleDriver: ②获取数据库链接:  a.MySQL:jdbc:mysql://localhost:3306/DataBaseName: b.SQLServer:jdbc:sqlse

JavaSE入门学习24:Java面向对象补充

一Java中的Object类 Object类是所有Java类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认 继承Object类. public class Person{ // } //等价于 public class Person extends Object{ // } Object类中的方法,适合所有子类. 1)toString()方法 在Object类中定义有public String toString()方法,其返回值是String类型,描述当前对

JavaSE入门学习23:Java面向对象之构造方法

学了JavaSE面向对象这一部分,也该对构造方法做一个总结了. 一构造方法 在多数情况下,初始化一个对象的最终步骤是去调用这个对象的构造方法.构造方法负责对象的初始化工作,为 实例变量赋予合适的初始值.构造方法必须满足以下语法规则: (1)方法名必须与类名相同: (2)不要声明返回类型: (3)不能被static.final.synchronized.abstract和native修饰.构造方法不能被子类继承,所以用final和abstract 修饰没有意义.构造方法用于初始化一个新建的对象,所

【史上最强JavaSE笔记】之数组篇

各位程序猿,各位攻城狮,各位蜥蜴鸥以及各位棕鲸鲤们~~大家好,我是潘师傅,欢迎大家收看由我为你们带来的[史上最强JavaSE笔记]系列,其实也可以叫[嘻哈JavaSE笔记]的,第一次在博客园发帖,想想还真是有点小激动呢,各位求支持呀,哈哈,那么回归正题,我把自己之前学习积累的笔记拿出来跟大家分享一下,方便大家更好的理解和复习,希望能够对大家有所帮助哈,这次发的是JavaSE方面数组篇的,内容不一定全面哦,欢迎大家前来留言交流哈,不足的地方还望大家多多指出和指导哈~(由于首次发文章,布局可能比较乱

java-se基础 2(注释和原生数据类型)

Java SE 第二讲: 1. Windows: notepad, editplus, ultraedit, gvim Linux: vi, vim, gedit 2. Java中的数据类型分为两大类: 1) 原生数据类型 (Primitive Data Type) 2) 引用类型(对象类型) (Reference Type) 3. 变量与常量:所谓常量,就是值不会变化的量:所谓变量,就是值可以变化的量. 4. 如何定义变量? 变量类型 变量名; int a; 5. 如何为变量赋值? 变量名 =

JavaSE 文件递归之删除&amp;amp;获取文件夹文件夹中全部的以.jpg的文件的绝对路径

1.递归删除文件 假设一个文件夹以下还有子文件夹,进行删除的话会 报错,这个时候要使用递归的方式来删除这个文件文件夹中的全部文件以及文件夹 package cn.itcast.digui; import java.io.File; /** * 递归删除demo目录中全部文件包含目录 * 分析: * A:封装目录 * B:获取改目录下的全部文件或者目录 * C:遍历改file数组,得到每个File对象 * D:推断该file对象是都是目录 * 是:回到B * 否:删除 * @author Admi

javase基础

目录 目录... 1 第一天... 5 1:计算机概述(了解) 5 2:键盘功能键的认识和快捷键(掌握) 5 3:常见的DOS命令(掌握) 6 4:Java语言概述(了解) 6 5:JDK,JRE,JVM的作用及关系(掌握) 7 6:JDK的下载,安装,卸载(掌握) 7 7:第一个程序:HelloWorld案例(掌握) 7 8:常见的问题(掌握) 8 9:path环境变量(掌握) 8 10:classpath环境变量(理解) 8 第二天... 10 1:关键字(掌握) 10 2:标识符(掌握)

JavaSE注释

注解在JavaSE中算是比较高级的一种用法了,为什么要学习注解,我想大概有以下几个原因: 1. 可以更深层次地学习Java,理解Java的思想. 2. 有了注解的基础,能够方便阅读各种框架的源码,比如hibernate,SpringMVC等等.里面就用到了大量的注解.即便无法阅读源码,以后使用这些框架,会有一种心理上的安全感. 3. 方便今后跟别人吹牛.(当然,这也很重要.) 好了,话不多说,我们开始吧. 1. 从注释的角度来理解注解 我想了很久,最终决定以这个小标题作为第一节的标题,我们在编写