Java I/O系统-BufferedReader读操作

  1. BufferedReader      

该类继承自Reader类,主要从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。BufferedReader就是一个装饰器,它和其自雷负责装饰其他Reader对象。

两个构造函数:

BufferedReader(Reader in) :创建一个使用默认大小输入缓冲区的缓冲字符输入流。

BufferedReader(Reader in, int sz) :创建一个使用指定大小输入缓冲区的缓冲字符输入流,大多数情况下,默认值就足够大了。

下面是关于此类如何读取文件的一些常用方法:

 1 public class IOStreamDemo {
 2     public static void readFileByBufferedReader(String path) throws IOException {
 3         /*
 4          * 定义Reader对象,直接调用该reader对象的read()方法逐个读取字符
 5          */
 6         Reader read1 = new FileReader(path);
 7         // int count = 0; 可以定义count变量统计字符个数
 8         int ch1 = 0; // 存放读取的字符
 9         /*
10          * read()返回值作为一个整数(其范围从 0 到 65535 (0x00-0xffff))读入的字符,如果已到达流末尾,则返回 -1
11          */
12         while ((ch1 = read1.read()) != -1) {
13             // count++;
14             // System.out.print((char) ch1);
15         }
16         read1.close();
17 
18         /*
19          * 利用BufferedReader进行文件的读操作,逐个字符读取
20          */
21         BufferedReader bufReader1 = new BufferedReader(new FileReader(path));
22         int ch2 = 0;
23         StringBuffer strBuffer = new StringBuffer();
24 
25         while ((ch2 = bufReader1.read()) != -1) {
26             strBuffer.append((char) ch2);
27             // strBuffer.append("\n");
28         }
29         bufReader1.close();
30         // System.out.println(strBuffer);
31 
32         /*
33          * 利用BufferedReader进行文件的读操作,每次读取1024个字符,并将读取的字符放入cbuf2数组中
34          */
35         BufferedReader bufReader2 = new BufferedReader(new FileReader(path));
36         char[] cbuf2 = new char[1024];
37         int readLen2 = bufReader2.read(cbuf2);
38         while (true) {
39             if (readLen2 == -1) {
40                 break;
41             }
42             for (int k = 0; k < readLen2; k++) {
43                 // System.out.print(cbuf2[k]);
44             }
45             readLen2 = bufReader2.read(cbuf2);
46         }
47         bufReader2.close();
48 
49         /*
50          * 利用BufferedReader进行文件的读操作,每次读取1024个字符,并将读取的字符放入cbuf3数组中
51          */
52         BufferedReader bufReader3 = new BufferedReader(new FileReader(path));
53         int maxLen = 1024;
54         // 每次读取1024个字符
55         char[] cbuf3 = new char[maxLen];
56         int readLen3 = bufReader3.read(cbuf3, 0, maxLen);
57         while (true) {
58             if (readLen3 == -1) {
59                 break;
60             }
61             for (int k = 0; k < readLen3; k++) {
62                 System.out.print(cbuf3[k]);
63             }
64             readLen3 = bufReader3.read(cbuf3, 0, maxLen);
65         }
66         bufReader3.close();
67 
68         /*
69          * 利用BufferedReader进行文件的读操作,逐行读取
70          */
71         BufferedReader bufReader4 = new BufferedReader(new FileReader(path));
72         String str;
73         // 逐行读取
74         while ((str = bufReader4.readLine()) != null) {
75             // System.out.println(str);
76         }
77         bufReader4.close();
78     }
79 
80     public static void main(String[] args) throws IOException {
81         readFileByBufferedReader("E:\\test\\uum.sql");
82     }
83 }

利用BufferedReader读取控制台的标准输入:

// Reading standard input:
    BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in));
    System.out.print("Enter a line:");
    System.out.println(stdin.readLine());

 

利用BufferedReader读文件的时候可能会遇到乱码,乱码的解决方案可如下代码

1 InputStreamReader  isr= new InputStreamReader(new FileInputStream(file), "UTF-8");
2 BufferedReader read = new BufferedReader(isr);

利用BufferedReader读取内存:

String str = "hello world";
StringReader in = new StringReader(str );
BufferedReader reader= new BufferedReader( in );
int c;
try {
    while((c = reader.read()) != -1)
        System.out.print((char)c);
} catch (IOException e) {
    e.printStackTrace();
}

以上是在学习中的代码练习,若有不对的地方欢迎大家指出。

posted @ 2013-12-23 15:55  mumumy  阅读(435)  评论(0编辑  收藏  举报