Java之BufferedReader

    技术2022-05-19  29

    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 具体的方法:  void close ()           关闭该流。  void mark (int readAheadLimit)           标记流中的当前位置。  boolean markSupported ()           判断此流是否支持 mark() 操作(它一定支持)。  int read ()           读取单个字符。  int read (char[] cbuf, int off, int len)           将字符读入数组的某一部分。  String readLine ()           读取一个文本行。  boolean ready ()           判断此流是否已准备好被读取。  void reset ()           将流重置为最新的标记。  long skip (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;

    最新回复(0)