------- android培训、java培训、期待与您交流! ----------
IO流(1)
一、IO流
1. IO流是用来处理设备之间的数据传输,java是通过流的方式完成对数据的传输。
2. 操作的基本规律
1)明确源和目的。
2)操作的数据是否是纯文本。3)当体系明确后,明确要使用哪个具体的对象。
二、IO流结构
IO流
|--- 字节流
|-- 输入流抽象基类: InputStream
|-- 输出流抽象基类: Outputtream
|--- 字符流
|-- 输入流抽象基类: Reader
|-- 输出流抽象基类: Writer
注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
例 : Reader 的子类 FileReaderWriter的子类FileWriter
三、字符流的输入与输出(演示IO流的书写规范)
1.
既然 IO 流是用于操作数据的,
那么数据的最常见体现形式是:文件。那么先以操作文件为主来演示。需求: 在硬盘上,创建一个文件并写入一些文字数据。
找到一个专门用于操作文件的 Writer 子类对象。 FileWriter 。 【后缀名是父类名。 前缀名是该流对象的功能】
示例:【 FileWriterDemo 】 ---- 必须掌握步骤
import java.io.*;class FileWriterDemo{public static void main(String[] args) throws IOException{// 创建一个 FileWriter 对象。该对象一被初始化就必须要明确被操作的文件。
// 而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。
// 其实该步就是在明确数据要存放的目的地。
FileWriter fw = new FileWriter("demo.txt");// 调用 write 方法,将字符串写入到流中。
fw.write("abcde");// 刷新流对象中的缓冲中的数据。
// 将数据刷到目的地中。
//fw.flush(); // 把流中的数据放到目的地 但是这样流一直存在
// 关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。
// 将数据刷到目的地中。
// 和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。
fw.close();}}
2.Io 异常的处理方式
示例:记住格式1)导入IO包中的类l
2)进行IO异常处理
3)在finally中对流进行关闭
import java.io.*;class FileWriterDemo2{public static void main(String[] args){FileWriter fw = null; // 在外边建立引用 养成习惯局部变量都初始化一下
try{fw = new FileWriter("demo.txt"); // 在里边进行初始化,这样 fw 才能应用于整个程序
fw.write("abcdefg");}catch (IOException e){System.out.println("catch:"+e.toString());}finally{Try //!!重点!!!
{if(fw!=null)// 必要的,有几个流对象 fw ,就要有几个关闭,几个判断,分别操作
fw.close();}catch (IOException e){System.out.println(e.toString());}}}
3演示对已有文件的数据续写。
所用构造函数:FileWriter(String fileName, boolean append)根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
示例:import java.io.*;class FileWriterDemo3{public static void main(String[] args) throws IOException{// 传递一个 true 参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。
FileWriter fw = new FileWriter("demo.txt" ,true );
fw.write("nihao\r\nxiexie"); // 注意:在WIN系统下换行符是\r\n
fw.close();}}
4读取一个.java文件,并打印在控制台上。
import java.io.*;class FileReaderTest{public static void main(String[] args) throws IOException{FileReader fr = new FileReader("DateDemo.java");char[] buf = new char[1024];int num = 0;while((num=fr.read(buf))!=-1){System.out.print(new String(buf,0,num));}fr.close();}}
5.将C盘一个文本文件复制到D盘。
/*复制的原理:其实就是将C盘下的文件数据存储到D盘的一个文件中。步骤:1,在D盘创建一个文件。用于存储C盘文件中的数据。2,定义读取流和C盘文件关联。3,通过不断的读写完成数据存储。4,关闭资源。*/示例:import java.io.*;class CopyText{public static void main(String[] args) throws IOException{copy_2();}public static void copy_2(){FileWriter fw = null;FileReader fr = null;try{fw = new FileWriter("SystemDemo_copy.txt");fr = new FileReader("SystemDemo.java");char[] buf = new char[1024];int len = 0;while((len=fr.read(buf))!=-1){fw.write(buf,0,len);}}catch (IOException e){throw new RuntimeException(" 读写失败 ");
}finally{if(fr!=null)try{fr.close();}catch (IOException e){}if(fw!=null)try{fw.close();}catch (IOException e){}}}// 从 C 盘读一个字符,就往 D 盘写一个字符。
public static void copy_1()throws IOException{// 创建目的地。
FileWriter fw = new FileWriter("RuntimeDemo_copy.txt");// 与已有文件关联。
FileReader fr = new FileReader("RuntimeDemo.java");int ch = 0;while((ch=fr.read())!=-1){fw.write(ch);}fw.close();fr.close();}}