一、流的分类
按操作数据分:字节流与字符流
按流向分:输出流,输入流
二、IO流常用基类
字节流的抽象基类:
InputStream,OutputStream
字符流的抽象基类
Reader writer
三、字符流的特点
1、Writer(抽象基类:意味着要别人来实现)
常用直接子类:FileWriter
需求:在硬盘上,创建一个文件并写入数据
import java.io.FileWriter; import java.io.IOException; public class IoWriter { public static void main(String[] args) throws IOException { //创建一个FileWriter对象,该对象被初始化必须要明确被操作的文件 //假如"demo.txt"之前不存在,编译运行后它会被创建。如果目录下有同名文件,将被覆盖 FileWriter fw=new FileWriter("demo.txt"); //调用write方法,将字符串写到流(内存)中,还没写到目的地 fw.write("abc"); //这个刷新方法把流中的东西写到目的地 fw.flush(); } }
需求:我想续写文件内容,该怎么做?
import java.io.FileWriter; import java.io.IOException; public class IoWriter { public static void main(String[] args) throws IOException { //加上一个true即可 FileWriter fw=new FileWriter("demo.txt",true); fw.write("hahaha"); fw.flush(); } }
2、Reader(抽象)
常用子类:FileReader
需求:读取“demo.txt”中的内容
public class FileReaderDemo { public static void main(String[] args) throws IOException { //我想读的文件是谁。这个文件必须存在,否则报异常 FileReader fr=new FileReader("demo.txt"); //read():一次读一个字符。而且会自动往下读 int ch1=fr.read(); System.out.println("ch1="+(char)ch1); int ch2=fr.read(); System.out.println("ch2="+(char)ch2); //假如我读到末尾,没有东西可以读,就会返回-1 while(true){ int ch=fr.read(); if(ch==-1) break; System.out.println("ch="+(char)ch); } fr.close(); } }
又或者把循环语句改成:
public class FileReaderDemo { public static void main(String[] args) throws IOException { //我想读的文件是谁。这个文件必须存在,否则报异常 FileReader fr=new FileReader("demo.txt"); //又或者这么读,如果不等于-1,我就一直读 int ch=0; while((ch=fr.read())!=-1){ System.out.println("ch="+(char)ch); } fr.close(); } }