天天看点

黑马程序员——黑马学习日志之十四 IO流(三)

------- android培训、java培训、期待与您交流! ----------

黑马学习日志之十四 IO流(三)

1 读取键盘录入

System.out:对应的是标准的输出设备,控制台

System.in:对应的是标准的输入设备,键盘

例子:

import java.io.*;

class ReadIn

{

 public static void main(String [] args)throws IOException{

   InputStream in = System.in;

   int by = in.read();

   int by1 = in.read();

   int by2 = in.read();

   System.out.println(by);

   System.out.println(by1);

   System.out.println(by2);//输入a回车符 打印结果 97 13 10 

   //因为\r是13 \n是10

  InputStream in2=System.in;

     int by11=in2.read();

      int by12 =in2.read();

      int by13 =in2.read();

      System.out.println(by11);//输入abc 打印结果97 只有一个

      System.out.println(by12);

      System.out.println(by13);//输入abc 打印结果 97 98 99  

 }

}

例子:

通过键盘录入数据,当录入一行数据后,就将该行数据进行打印,如果录入的数据是over,那么停止录入。

import  java.io.*;

class ReadIn

{

  public static void main(String[]args) throws IOException{

   InputStream in=System.in;

   StringBuilder sb =new StringBuilder();

   while(true)

   {

    int ch =in.read();

    if(ch=='\r')

      continue;

    if(ch=='\n'){

       Strings=sb.toString();

     if("over".equals(s))

       break;

     System.out.println(s.toUpperCase());

         sb.delete(0,sb.length());

    }

    else{

     sb.append((char)ch);

    }

   }

   in.close();

 }

}

2 转换流

InputStreamReader 字节流通向字符流 是Reader的子类

例子:

import java.io.*;

class TransStreamDemo1

{

  public static void main(String [] args)throws IOException{

   //获取键盘录入对象

   InputStream in = System.in;

   //将字节流对象转成字符流对象,使用转换流。InputStreamReader

   InputStreamReader isr =  new InputStreamReader(in);

   //为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader

   BufferedReader bufr = new BufferedReader(isr);

   String line = null;

   while ((line=bufr.readLine())!=null)

   {

    if("over".equals(line))

      break;

    System.out.println(line.toUpperCase());

   }

   bufr.close();

  }

}

OutputStreamWriter 字符流通向字节流Writer的子类

例子:

import java.io.*;

class TransStreamDemo

{

 public static void main(String [] args)throws IOException{

  //获取键盘录入对象

  InputStream in = System.in;

  //将字节流对象转成字符流对象,使用转换流。InputStreamReader

  InputStreamReader isr =  new InputStreamReader(in);

  //为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader

  BufferedReader bufr = new BufferedReader(isr);

  OutputStream out =  System.out;

  OutputStreamWriter osw = new OutputStreamWriter(out);

  BufferedWriter bufw = new BufferedWriter(osw);

  String line = null;

  while ((line=bufr.readLine())!=null)

  {

   if("over".equals(line))

    break;

   //System.out.println(line.toUpperCase());

   bufw.write(line.toUpperCase());

   bufw.newLine();

   bufw.flush();

  }

  bufr.close();//这里不关闭也是可以的 最终是系统关闭in

 }

}

//三句话变一句 来简化 键盘录入最常见写法

BufferedReader bufr = 

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

BufferedWriter bufw = 

 new BufferedWriter(new OutputStreamWriter(System.out));

3 流操作规律

(1) 源 键盘录入

   目的:控制台

(2) 需求:想把键盘录入的数据存储到一个文件中

    源  键盘录入

    目的  文件

(3) 需求:想要将一个文件的数据打印在控制台上

    源:文件

    目的: 控制台

流操作的基本规律:

流对象有很多,通过三个明确来完成

(1).明确源和目的

 源:输入流 InputStream Reader

 目的:输出流 OutputStream  Writer

(2)操作的数据是否是纯文本

 是:字符流

 不是:字节流

(3)当体系明确后,在明确要使用哪个具体的对象

 通过设备来进行区分

 源设备:内存,硬盘,键盘

 目的设备:内存,硬盘,控制台

4 改变标准输入输出设备

System类中可以改变输入输出设备 

static void setIn(InputStream in) 重新分配“标准”输入流。 

static void setOut(PrintStream out) 重新分配“标准”输出流。 setOut对象是PrintStream

例如

System.setIn(new FileInputStream("CopyText.java"));

System.setOut(new PrintStream("zz.txt"));

例子:

import java.io.*;

class TransStreamDemo

{

 public static void main(String [] args)throws IOException{

  System.setIn(new FileInputStream("CopyText.java"));

  System.setOut(new PrintStream("zz.txt"));

  //获取键盘录入对象

  InputStream in = System.in;

  //将字节流对象转成字符流对象,使用转换流。InputStreamReader

  InputStreamReader isr =  new InputStreamReader(in);

  //为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader

  BufferedReader bufr = new BufferedReader(isr);

  OutputStream out = System.out;

  OutputStreamWriter osw = new OutputStreamWriter(out);

  BufferedWriter bufw = new BufferedWriter(osw);

  String line = null;

  while ((line=bufr.readLine())!=null)

  {

   if("over".equals(line))

    break;

   //System.out.println(line.toUpperCase());

   bufw.write(line.toUpperCase());

  bufw.newLine();

   bufw.flush();

  }

  bufr.close();

 }

}

5 IO异常信息

这里的异常日志信息是和IO流有关联的

Throwable中的printStackTrace有重载方法 printStackTrace(PrintStream s) 

例子:

import java.io.*;

import java.util.*;

import java.text.*;

class ExceptionInfo

{

 public static void main(String [] args)throws IOException{

  try

  {

   int [] arr=new int[2];

   System.out.println(arr[3]);

  }

  catch (Exception e)

  {

   try

   {

    Date d = new Date();

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//将hh改为HH     String s= sdf.format(d);

    PrintStream ps = new PrintStream("exception.log");

    ps.println(s);

    System.setOut(ps);

   }

   catch (IOException ex)

   {

    throw new RuntimeException("日志文件创建失败");

   }

   e.printStackTrace(System.out);

  }

 }

}

6 系统信息

结合流打印

import java.util.*;

import java.io.*;

class SystemInfo

{

 public static void main(String [] args)throws IOException{

  Properties prop = System.getPropreties();

  //System.out.println(prop);//当时用的是遍历集合的方式 是个map集合 map集合在内存中

  prop.list(new PrintStream("sysinfo.txt"));

 }

}

------- android培训、java培训、期待与您交流! ----------