Java之BufferedReader

1 接收键盘输入:

 

BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));

String password ="";

try{

password = buf.readLine();

}catch(IOException e)

{

System.out.println(e);

System.exit(0);

}

 

 

类 BufferedReader

java.lang.Object




  继承者 

java.io.Reader




      继承者 

java.io.BufferedReader




具体的方法:


 voidclose()
          关闭该流。
 voidmark(int readAheadLimit)
          标记流中的当前位置。
 booleanmarkSupported()
          判断此流是否支持 mark() 操作(它一定支持)。
 intread()
          读取单个字符。
 intread(char[] cbuf, int off, int len)
          将字符读入数组的某一部分。
 StringreadLine()
          读取一个文本行。
 booleanready()
          判断此流是否已准备好被读取。
 voidreset()
          将流重置为最新的标记。
 longskip(long n)
          跳过字符。
http://www.gznc.edu.cn/yxsz/jjglxy/book/Java_api/java/io/BufferedReader.html








InputStreamReader是InputStream和Reader之间的桥梁,由于System.in是字节流,需要用它来包装之后变为字符流供给



BufferedReader

使用












java.io.BufferedReader与java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出至目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。例如一个文件,通过缓冲区可减少对硬盘的输入/输出动作,以提高文件存取的效率。

之前在介绍取得用户输入时,就使用过BufferedReader。从标准输入流System.in中直接读取用户输入时,用户每输入一个字符,System.in就读取一个字符。为了能一次读取一行用户的输入,使用了BufferedReader来对用户输入的字符进行缓冲。readLine()方法会在读取到用户的换行字符时,再一次将整行字符串传入。

System.in是一个位流,为了转换为字符流,可使用InputStreamReader为其进行字符转换,然后再使用BufferedReader为其增加缓冲功能。例如:

BufferedReader reader =


new BufferedReader(new InputStreamReader(System.in));

范例14.19示范了BufferedReader与BufferedWriter的使用。可以在文字模式下输入字符,程序会将输入的文字存储至指定的文件中,如果要结束程序,输入quit字符串即可。

范例14.19  BufferedReaderWriterDemo.java

package onlyfun.caterpillar;
import java.io.*;
public class BufferedReaderWriterDemo {


public static void main(String[] args) {


try {


// 缓冲System.in输入流


BufferedReader bufReader =


new BufferedReader(


new InputStreamReader(System.in));


// 缓冲FileWriter字符输出流


BufferedWriter bufWriter =


new BufferedWriter(new FileWriter(args[0]));
            String input = null;
            // 每读一行进行一次写入动作


while(!(input =


bufReader.readLine()).equals("quit")) {


bufWriter.write(keyin);


// newLine()方法写入与操作系统相依的换行字符


bufWriter.newLine();


}
            bufReader.close();


bufWriter.close();


}


catch(ArrayIndexOutOfBoundsException e) {


System.out.println("没有指定文件");


}


catch(IOException e) {


e.printStackTrace();


}


}


}

由于换行字符依操作系统不同而有所区别,在Windows下是/r/n,在Linux下是/n,在Mac OS下是/r,您可以使用newLine()方法,由执行环境依当时的操作系统决定该输出哪一种换行字符

 

 

 

常用转换

FileReader——>BufferedReader
BufferedReader in= new BufferedReader(new FileReader("Text.java"));
InputStream——>InputStreamReader——>BufferedReader
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String——>byte[]——>ByteArrayInputStream——>DataInputStream
DataInputStream in= new DataInputStream(new ByteArrayInputStream(str.getBytes()));
FileInputStream——>BufferedInputStream——>DataInputStream
DataInputStream in=new DataInputStream(new BufferedInputStream(new FileInputStream("Data.txt")));
FileWriter——>BufferedWriter——>PrintWriter
PrintWriter pw=new PrintWriter(new BufferedWriter("text.out"));
System.out(PrintStream)——>PrintWriter
PrintWriter pw=new PrintWriter(System.out,true);
FileOutputStream——>BufferedOutputStream——>PrintStream
PrintStream ps= new PrintStream(new BufferedOutputStream(new FileOutputStream("text.out")));
FileOutputStream——>BufferedOutputStream——>DataOutputStream
DataOutputStream dos= new DataOutputStream(new BufferedOutputStream(new FileOutputStream("Data.txt")));


程序举例

import java.io.*;
public class IoStreamDemo {
  public static void main(String[] args) throws IOException {
1.要想打开文件读取字符,你得先用String或File对象创建一个FileReader。
   为了提高速度,你应该对这个文件作缓冲,因此你得把FileReader的reference 交给BufferedReader。
   BufferedReader提供了readLine()方法,当你读到文件的末尾时readLine()会返回一个null,于是就退出while()循环了。
   String sb是用来累加文件内容的,(再加一个换行符“/n”因为readLine()会把它们都剥掉).
   最后用close()来清空缓冲区。
    BufferedReader in = new BufferedReader(new FileReader("IOStreamDemo.java"));
    String s,s2= new String();
       StringBuffer sb = new StringBuffer();
    while((s = in.readLine())!= null)
   { sb.append(s);
        sb.append("/n");
       }
    in.close();
s2=sb.toString();
   2. 用System.in生成一个能读取控制台输入的流。System.in是一个InputStream,
       而BufferedReader需要一个Reader作参数,所以要先通过InputStreamReader来转转手。
       Java遵循标准I/O的模型,提供了Syetem.in,System.out,以及System.err。
       System.out是一个已经预先处理过的,被包装成PrintStream的对象。
       System.err也是一个PrintStream;
       System.in是一个未经处理的InputStream。
       也就是说,虽然你可以直接往System.out和System.err上写,但是要想读System.in的话,就必须先做处理了。
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Enter a line:");
    System.out.println(stdin.readLine());
    3. 用String s2作参数创建一个StringReader。然后用StringReader的read()方法把字符读出来,再送到控制台上去。read()会把读出来的byte当作int,所以要想正常打印的话,你得先把它们转成char。
    StringReader in2 = new StringReader(s2);
    int c;
    while((c = in2.read()) != -1)
      System.out.print((char)c);
    4. 要想读取"格式化"的数据,你就得用DataInputStream了,DataInputStream是一个面向byte的I/O类,不是面向char的。因此你只能从头到底一直用InputStream了。当然你可以把所有的东西都当成byte。然后用InputStream读出来。但这里是String。要想把String当成byte数组。可以用String的getBytes()方法。而ByteArrayInputStream是可以处理byte数组的。
try {
        DataInputStream in3 = new DataInputStream(
        new ByteArrayInputStream(s2.getBytes()));
      while(true)
        System.out.print((char)in3.readByte());
    } catch(EOFException e) {
      System.err.println("End of stream");
    }

String和char之间的转换:

String转为char 数组

char chr[]= c.toCharArray();

char转换为String:

String( chr);



或者 String str = String.valueOf(c);  c为char;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值