黑马程序员技术交流社区

标题: java基础持续更新------IO(2) [打印本页]

作者: 青龙李坤    时间: 2015-6-17 22:43
标题: java基础持续更新------IO(2)
FileReader主要用于读取,读取方式的不同也必然导致效率的不同。
1. 读取单个字符:读取单个字符,在字符可用、发生I/O错误或者已到达流的末尾前,此方法一直阻塞。返回值为读取到的字符数,如果已到达流的末尾,则返回-1.
2. 读取字符数组:将读取到的字符存储到字符数组里面,并且返回字符数组的长度。如果到达流的末尾,返回-1.
1.  import java.io.FileNotFoundException;   
2.  import java.io.FileReader;   
3.  import java.io.IOException;   
4.      
5.  public class FileReaderTest {   
6.      
7.      public static void main(String[] args) throws IOException {   
8.          // TODO Auto-generated method stub   
9.          FileReader fr = new FileReader("IO.txt");   
10.            
11.        //演示读取单个字符   
12.        long time = System.currentTimeMillis();   
13.        readChar(fr);   
14.        long timereadChar = System.currentTimeMillis();   
15.            
16.        System.out.println("time Read char is  = " + (timereadChar-time));   
17.        //演示读取字符到缓冲区中。   
18.            
19.         long time2 = System.currentTimeMillis();   
20.        readToBuf(fr);   
21.        long timeReadBuf = System.currentTimeMillis();   
22.        System.out.println("time Read to Buf is =  " + (timeReadBuf-time2));   
23.            
24.     
25.    }   
26.     private static void readToBuf(FileReader fr) throws IOException {   
27.        //定义一个字符缓冲区,用于存放读到的字符。   
28.        char[] buf = new char[50];   
29.        //设刚开始读到的字符为0   
30.        int len = 0 ;   
31.        //一直循环读取字符到缓冲区中,直到读到流的末尾。   
32.        while((len = fr.read(buf)) != -1){   
33.            //将每次读满的缓冲区中的字符,变成字符串打印出来。   
34.            System.out.println(new String(buf , 0 , len));         
35.        }      
36.    }   
37.     private static void readChar(FileReader fr) throws IOException {   
38.        //设每个读取到的字符整数值为ch.   
39.        int ch = 0;     
40.        //循环读取字符,直到流的末尾   
41.        while((ch = fr.read()) != -1){   
42.            //将读取到的字符,强制转换为 char   
43.            System.out.print((char) ch);   
44.        }   
45.    }   
46. }   

缓冲区:
流对象的read():是从目的地一次读取一个。
缓冲区的read():是通过流对象的read将一批数据读取到缓数组,然后再从数组中一次取一个,所以内存操作要比硬盘操作要高效。
Java中,为了提高程序的效率,为我们提供了对应的类:
BufferedReaderBufferedWriter
示例三:
1.  import java.io.BufferedWriter;   
2.  import java.io.FileWriter;   
3.  import java.io.IOException;   
4.      
5.  public class BufferedWriterDemo {   
6.      
7.      public static void main(String[] args) throws IOException {   
8.      
9.          //创建一个流对象。   
10.        FileWriter fw = new FileWriter("buf.txt");   
11.            
12.        //为了提高效率。创建缓冲区对象,并和要被提高效率的流相关联。     
13.        BufferedWriter bufw = new BufferedWriter(fw);   
14.        
15.        for(int x=0;x<4; x++){   
16.            bufw.write(x+"--hahaha");   
17.            //写入一个换行符。   
18.            bufw.newLine();   
19.            //要对缓冲区进行刷新。记住:一般只要使用了缓冲区,就一定要刷新。     
20.            bufw.flush();   
21.        }   
22.            
23.        //关闭缓冲区。     
24.        bufw.close();//问:还用关闭fw.close()?不用,因为关闭缓冲区,其实就是在关闭缓冲区关联的流。   
25.            
26.    }   
27. }   

示例四:
1.  import java.io.BufferedReader;   
2.  import java.io.FileReader;   
3.  import java.io.IOException;   
4.      
5.  public class BuffereReaderDemo {   
6.      
7.      public static void main(String[] args) throws IOException {   
8.              
13.        //创建读取流对象 文件相关联。   
14.        FileReader fr = new FileReader("Demo.txt");   
15.            
16.        //创建读取缓冲区对象 流对象关联对其进行高效 操作;   
17.        BufferedReader  bufr = new BufferedReader(fr);   
18.        //简写形式:   
19.        //BufferedReader bufr = new BufferedReader(new FileReader("Demo.txt"));   
20.            
21.        String line = null ;   
22.        while((line = bufr.readLine()) != null){   
23.            System.out.println(line);   
24.        }   
25.        bufr.close();   
26.    }   
27. }   


作者: 青龙李坤    时间: 2015-6-17 22:44
这是第二部分的,不要看知识点多,细心加上我们的态度必成大事!!!
作者: 1958078929    时间: 2015-6-18 08:29
谢谢分享
作者: 王冲6060    时间: 2015-6-18 19:58
感谢分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2