1.InputStream 、OutPutStream
InputStream 和 OutPutStream是处理字节流的抽象类
InputStream 是字节输入流的所有类的超类,一般使用它的子类,如FileInputStream等;
OutPutStream是字节输出流的所有类的超类
2.InputStreamReader、OutputStreamReader
InputStreamReader和OutputStreamReader是处理字符流的超类
InputStreamReader是字节流通向字符流的桥梁,它将字节转换为字符流。
OutputStreamReader是字符流向字节流的桥梁,它将字节转换为字节流。
3.BufferedReader、BufferWriter
(1) BufferedReader所属类库:
java.lang.Object
java.io.Reader
java.io.BufferedReader
BufferedReader提供缓冲方式读取文本,readLine()读取一个文本行,从字符输入流中读取文本,缓冲各个文本,从而提供字符,数组和行的高效读取。
(2) BufferedWriter类由Writer类扩展而来,提供通用的缓冲方式写入文本,newLine()使用平台自己的行分隔符,将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
(3)通过 Bufferedreader 捕获从键盘所输入的语句
public static void main(String[] args) throws IOException{
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader read=new BufferedReader(input);
System.out.print(read.readLine());
}
(4)通过BufferedWriter向文件写入字符串,通过try-with-resources来声明和创建输入输出流,从而在使用后可以自动关闭。
import java.io.*;
public class project1 {
public static void main(String [] args) throws IOException{
String path="D:\\相片\\新建文本文档.txt";
File file=new File(path);
try(
OutputStreamWriter writer=new OutputStreamWriter(new FileOutputStream(file),"UTF-8")
){
BufferedWriter bufferedWriter=new BufferedWriter(writer);
bufferedWriter.write("你是谁?从哪来?到哪去?");
bufferedWriter.flush();
}
}
}
使用BufferedWriter 将内容写入文件,先开始少了wriite.flush()这句,发现无法写入内容。查资料后发现,原来BufferedWriter是缓冲输入流,意思是当你调用BufferedWriter的write方法时候。数据是先写入到缓冲区里,并没有直接写入到目的文件里。你必须调用BufferedWriter的flush()方法。这个方法会刷新一下该缓冲流,也就是会把数据写入到目的文件里。
(5)通过BufferedReader 读取文件
import java.io.*;
public class project1 {
public static void main(String [] args) throws IOException{
String path="D:\\相片\\新建文本文档.txt";
File file=new File(path);
try(
InputStreamReader read = new InputStreamReader(new FileInputStream(file),"UTF8");
BufferedReader bufferedReader = new BufferedReader(read);
){
String line = null;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
}
}
(6)读取和写入实例
package test;
import java.io.*;
import java.util.Scanner;
public class project1 {
public static void main(String[] args) throws IOException{
int count=0;
String line;
File file=new File("D:\\相片\\新建文本文档.txt");
try(
OutputStreamWriter writer=new OutputStreamWriter(new FileOutputStream(file));
BufferedWriter buffer=new BufferedWriter(writer);
){
buffer.write("好好学习\n");
buffer.write("天天向上\n");
buffer.write("报效祖国\n");
buffer.write("报效天下");
buffer.newLine(); //换行
buffer.write("精忠报国");
buffer.newLine();
buffer.write("天天向上");
buffer.flush();
}
try(
InputStreamReader read=new InputStreamReader(new FileInputStream(file));
BufferedReader buffer=new BufferedReader(read);
){
while((line=buffer.readLine())!=null) {
count++;
if(line.contains("报效"))
System.out.println(line+" 这行包含了\"报效\"");
else
System.out.println(line);
}
System.out.println("这个文件一共有"+count+"行");
}
}
}