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

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

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

读取键盘录入

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 
   //因为\r13 \n10

  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();

 }
}

转换流

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));

流操作规律

(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);
  }
 }
}
系统信息

结合流打印
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培训、期待与您交流! ----------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值