------- android培训、java培训、期待与您交流! ----------
黑马程序员------IO(一)
1.1 IO(Input Output)流概述:
IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中 流按操作数据分为两种:字节流与字符流。 流按流向分为:输入流,输出流。将外设中的数据读取到内存中:输入。
将内存的数写入到外设中:输出。
1.2 IO中的字符流和字节流:
字节流两个基类:
InputStream OutputStream字符流两个基类:
Reader WriterP.S.
由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。如:InputStream的子类FileInputStream。如:Reader的子类FileReader。
需求:在硬盘上,创建一个文件并写入一些文字数据(示例1)。
1 示例1: 2 import java.io.*; 3 class FileWriterDemo 4 { 5 public static void main(String[] args) throws IOException 6 { 7 //创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。 8 //而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。 9 //其实该步就是在明确数据要存放的目的地。10 FileWriter fw = new FileWriter("demo.txt");11 12 //调用write方法,将字符串写入到流中。13 fw.write("abcde");14 15 //刷新流对象中的缓冲中的数据。16 //将数据刷到目的地中。17 //fw.flush();18 19 20 //关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。21 //将数据刷到目的地中。22 //和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。23 fw.close();24 }25 }
PS:1. close方法只能用一次。
2. 流关闭以后不能,不能再调用write方法,否则会报如下异常错误:
3.如果构造函数中加入true,可以实现对文件进行续写(示例2)
1 示例2: 2 import java.io.*; 3 class FileWriterDemo3 4 { 5 public static void main(String[] args) throws IOException 6 { 7 8 //传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。 9 FileWriter fw = new FileWriter("demo.txt",true);根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。为 true,则将数据写入文件末尾处,而不是写入文件开始处10 11 fw.write("nihao\r\nxiexie");//\r\n表示换行12 13 fw.close();14 }15 }
1.3 IO异常的处理方式(示例3):为防止代码异常导致流无法关闭,因此在finally中对流进行关闭
1 示例3 2 import java.io.*; 3 4 class FileWriterDemo2 5 { 6 public static void main(String[] args) 7 { 8 FileWriter fw = null;//在外面建立引用 9 try10 {11 fw = new FileWriter("demo.txt");//在里面进行初始化12 fw.write("abcdefg");13 14 }15 catch (IOException e)16 {17 System.out.println("catch:"+e.toString());18 }19 finally20 {21 try22 {23 if(fw!=null)24 fw.close(); 25 }26 catch (IOException e)27 {28 System.out.println(e.toString());29 }30 31 } 32 33 }34 }
需求:读取一个文文件,将读取到的字符打印到控制台。(使用FileReader)
第一种读取方式:使用read()方法读取文本文件数据(示例4)
1 示例4: 2 3 class FileReaderDemo 4 { 5 public static void main(String[] args) throws IOException 6 { 7 //创建一个文件读取流对象,和指定名称的文件相关联。 8 //要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException 9 FileReader fr = new FileReader("demo.txt");10 11 //调用读取流对象的read方法。12 //read():一次读一个字符。而且会自动往下读。13 14 int ch = 0;15 16 while((ch=fr.read())!=-1)17 {18 System.out.println((char)ch);19 }20 21 22 /*23 while(true)24 {25 int ch = fr.read();26 if(ch==-1)27 break;28 System.out.println("ch="+(char)ch);29 }30 */31 32 33 34 fr.close();35 36 37 }38 }
第二种读取方式:使用read(char[])方法读取文本文件数据(示例5)。
1 示例5 2 3 4 import java.io.*; 5 6 class FileReaderDemo2 7 { 8 public static void main(String[] args) throws IOException 9 {10 FileReader fr = new FileReader("demo.txt");11 12 13 //定义一个字符数组。用于存储读到字符。14 //该read(char[])返回的是读到字符个数。15 char[] buf = new char[1024];16 17 int num = 0;18 while((num=fr.read(buf))!=-1)19 {20 System.out.println(new String(buf,0,num));21 }22 23 24 fr.close();25 }26 }