1、IO 流操作规律学习 IO 流最痛苦的是流对象很多,不知道用哪一个。1、明确数据源和目的源:输入流 InputStraeam Reader目的:输出流 OutputStream Writer2、操作的数据是否为纯文本纯文本:字符流非纯文本:字节流3、当明确体系后,再明确要使用哪个具体的对象通过设备来区分:源设备:内存、硬盘、键盘目的设备:内存、硬盘、控制台*将一个文本文件中的数据存储到另一个文件中,复制文件1,源:因为是源,所以使用读取流(InputStream Reader)是不是操作文本文件?是,选择 Reader2,明确要使用 IO 体系中的哪个对象明确设备:硬盘,是一个文件Reader
2、 体系中可以操作文件的对象是 FileReader是否需要提高效率?是!加入 Reader 体系中的缓冲区:BufferedReader3,目的:OutputStream Writer是否为纯文本?是!选择 Writer设备:硬盘,一个文件Writer 体系中可以操作文件的对象是 FileWriter是否需要提高效率?是!加入 Writer 体系中的缓冲区:BufferedWriter示例代码:import java.io.*;public class CopyFileDemopublic static void main(String args)throws ExceptionBuffere
3、dReader bufr = new BufferedReader(new FileReader(“d:/demo.txt“);BufferedWriter bufw = new BufferedWriter(new FileWriter(“d:/b.txt“);String str = null;while(str=bufr.readLine() != null)bufw.write(str);bufw.newLine();bufw.close();/一定要记得关 闭流资源bufr.close();*练习:将一个图片文件中的数据存储到另一个文件中,复制文件示例代码:import java.i
4、o.*;public class CopyPictureDemopublic static void main(String args)throws ExceptionFileInputStream fis = new FileInputStream(“d:/a.jpg“);FileOutputStream fos = new FileOutputStream(“d:/b.jpg“);int len = 0;while(len = fis.read() !=-1)fos.write(len);*需求:将键盘录入的数据保存到另一个文件中源:键盘 InputStream Reader是不是纯文本?
5、是!采用 Reader设备:键盘,对应的流对象是 System.in不是选择 Reader 吗?System.in 对应的不是字节流吗?为了操作键盘的文本数据方便,转成字符流按照字符串操作是最方便的,所以既然明确了 Reader,那么就将 System.in 转换成 Reader用 Reader 体系中的转换流 InputStreamReaderInputStreamReader isr = new InputStreamReader(System.in) ;需要提高效率吗?要!用 BufferedReaderBufferedReader bufr = new BufferedReader(i
6、sr) ;目的:OutputStream Writer是否为纯文本?是!用 Writer设备:硬盘,一个文件,使用 FileWriterFileWriter fw = new FileWriter(new File(“a.txt ”) ) ;需要提高效率吗?要!BufferedWriter bufw = new BufferedWriter(fw ) ;示例代码:import java.io.*;public class SystemInToFileDemopublic static void main(String args)throws ExceptionBufferedReader bu
7、fr = new BufferedReader(new InputStreamReader(System.in);BufferedWriter bufw = new BufferedWriter(new FileWriter(“d:/save.txt“);String str = null;while(str=bufr.readLine() != null)bufw.write(str);bufw.newLine();/写入一行之后进行换行bufw.flush();/每写完一行刷新一次,防止意外if(“over“.equals(str)break;bufw.close();bufr.close
8、();*想要把录入的数据按照指定的编码表,将数据存到文件中指定的编码表只有转换流可以指定 OutputStreamWriter,而该转换流对象要接收一个字节输出流,而且还是可以操作文件的输出流FileOutputStreamOutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream( “d.txt”) , “utf-8”) ;转换流:字符和字节之间的桥梁。通常,涉及到字符编码时,需要用到转换流。示例代码:import java.io.*;public class TransitionStreampublic stat
9、ic void main(String args)throws ExceptionBufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream(“d:/a.txt“),“utf-8“);BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(“d:/b.txt“),“utf-8“);String str = null;while(str=bufr.readLine() != nu
10、ll)bufw.write(str);bufw.newLine();bufw.close();bufr.close();*练习:将一个文本数据文件打印在控制台上示例代码:import java.io.*;public class PrintFileDemopublic static void main(String args)throws ExceptionBufferedReader bufr = new BufferedReader(new FileReader(“d:/a.txt“);BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out);String str = null;while(str=bufr.readLine() != null)bufw.write(str);bufw.newLine();bufw.close();bufr.close();*随机访问文件的读取和写入,用 RandomAccessFile该类自身具备读写的方法,通过 skipBytes(int x) ,seek(int x)来达到随机访问的目的。