黑马程序员------IO(一)

1.1 IO(Input  Output)流概述:

IO流用来处理设备之间的数据传输 

Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中 流按操作数据分为两种:字节流与字符流。
流按流向分为:输入流,输出流。

将外设中的数据读取到内存中:输入。

将内存的数写入到外设中:输出。

 

1.2 IO中的字符流和字节流:

字节流两个基类:
InputStream OutputStream

字符流两个基类:
Reader Writer

P.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         try
10         {
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         finally
20         {
21             try
22             {
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 }

 

posted on 2015-06-15 16:41  若诺  阅读(119)  评论(0编辑  收藏  举报