zoukankan      html  css  js  c++  java
  • IO流3(OutputStreamWriter,改变标准输入输出流)

    OutputStreamWriter

      1: class OutputStreamWriterDemo
    
      2: {
    
      3: 	public static void main(String[] args) 
    
      4: 	{
    
      5: 		//键盘录入
    
      6: 		InputStream in=System.in;
    
      7: 		InputStreamReader isr=new InputStreamReader(in);
    
      8: 		BufferedReader bufr=new BufferedReader(isr);
    
      9: 
    
     10: 		OutputStream out=System.out;
    
     11: 		//将输出语句变成字符流对象,可以直接操作字符串和使用BufferedWriter
    
     12: 		OutputStreamWriter osw=new OutputStreamWriter(out);
    
     13: 		BufferedWriter bufw=new BufferedWriter(osw);
    
     14: 
    
     15: 		String line=null;
    
     16: 		while((line=bufr.readLine())!=null)
    
     17: 		{
    
     18: 			if("over".equals(line))
    
     19: 				break;
    
     20: 			bufw.write(line.toUpperCase());
    
     21: 			bufw.newLine();
    
     22: 			bufw.flush();
    
     23: 		}
    
     24: 
    
     25: 		bufw.close();
    
     26: 		bufr.close();
    
     27: 
    
     28: 
    
     29: 	}
    
     30: }
    
     31: 

    如果需求是将键盘录入的数据存储到一个文件中去,代码如下:

      1: 
    
      2: //键盘录入
    
      3: BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
    
      4: 
    
      5: //存储到文件中去
    
      6: BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt")));
    
    如果需求是将文件中的打印到控制台上,代码如下:
      1: BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStream("文件名.txt")));
    
      2: 
    
      3: 
    
      4: BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
    
      5: 

    流操作的基本规律:

    <1>要明确源和目的

           源:输入流  InputStream和Reader

          目的:输出流 OutputStream和Writer

    <2>明确操作的数据是否为纯文本

            如果是纯文本的话,字符流,不是纯文本的话,使用字节流

    <3>当体系明确后,在明确使用哪个具体的对象

            通过设备来区分:

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

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

    例如:需求为将键盘录入的数据保存到一个文件中去

    分析如下:

    InputStream   Reader

    是不是纯文本?  是,那么使用Reader

    设备为键盘,对应的对象是System.in,但是通过以上分析,应该使用Reader呀,System.in对应的是字节流呀。为了操作键盘中的文本数据最方便,转换成字符流按照字符串的操作最方便。因此将System.in转换成Reader。用Reader体系中的转换流InputStreamReader。

      1: InputStreamReader isr=new InputStreamReader(System.in);

    是否需要提高效率呢?需要,那么使用BufferedReader

      1: BufferedReader bufr=new BufferedReader(isr);

    目的:OutputStream  Writer

    是否为纯文本呢?是。Writer

    设备为硬盘上的一个文件,FileWriter

      1: FileWriter fw=new FileWriter("c.txt");

    是否需要提高效率呢?是。使用BufferedWriter

      1: BufferedWriter bufw=new BufferedWriter(fw);

    扩展:如果想要将录入的数据按照指定的编码表(UTF-8)来存储到文件中去

    思考:只有转换流可以使用编码表。所以应该使用OutputStreamWriter对象,又因为该转换流对象要接收一个字节输出流,可以操作文件的字节输出流为FileOutputStream

      1: OutputStreamWriter osw=new OutPutStreamWriter(new FileOutputStream("d.txt")),"UTF-8");
    
      2: 
    
      3: BufferedWriter bufw=new BufferedWriter(osw);

    转换流是字符和字节之间的桥梁,通常,涉及到字符编码转换时,需要使用到转换流。


    改变标准输入输出流:

      1: public static void main(String[] args)throws IOException
    
      2: {
    
      3: 	//将标准的键盘输入改为从PersonDemo.java文件中读取数据
    
      4: 	System.setIn(new FileInputStream("PersonDemo.java"));
    
      5: 
    
      6: 	//将标准的控制台输出改为把数据存储到zzz.txt文件中去
    
      7: 	System.setOut(new PrintStream("zzz.txt"));
    
      8: 
    
      9: 	BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
    
     10: 
    
     11: 	BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
    
     12: 	String line=null;
    
     13: 
    
     14: 	while((line=bufr.readLine())!=null)
    
     15: 	{
    
     16: 		if("over".equals(line))
    
     17: 			break;
    
     18: 		bufw.write(line.toUpperCase());
    
     19: 		bufw.newLine();
    
     20: 		bufw.flush();
    
     21: 	}
    
     22: 
    
     23: 	bufr.close();
    
     24: 	bufw.close();
    
     25: }
    
     26: 

    异常的日志信息:

      1: 
    
      2: public static void main(String[] args)throws IOException
    
      3: {
    
      4: 	try
    
      5: 	{
    
      6: 		int[] arr=new int[2];
    
      7: 		System.out.println(arr[3]);
    
      8: 	}
    
      9: 	catch (Exception e)
    
     10: 	{
    
     11: 		try
    
     12: 		{
    
     13: 			Date d=new Date();
    
     14: 			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
     15: 			String s=sdf.format(d);
    
     16: 
    
     17: 			PrintStream ps=new PrintStream("exeception.log");
    
     18: 			ps.println(s);
    
     19: 			System.setOut(ps);
    
     20: 		}
    
     21: 		catch (IOException ex)
    
     22: 		{
    
     23: 			throw new RuntimeException("日志文件创建失败");
    
     24: 		}
    
     25: 
    
     26: 		e.printStackTrace(System.out);
    
     27: 	}
    
     28: }
    
     29: 

    SimpleDateFormat  它允许进行格式化(日期---文本),解析(文本---日期)和规范化。

    printStackTrace 是Throwable类下的方法,将此throwable及其追踪输出到指定的输出流。

      1: e.printStackTrace(System.out);
    
      2: 
    
      3: System.setOut(new PrintStream(“文件名”));
    
      4: 

    将异常内容输出到该文件中,也可以写成:

      1: e.printStackTrace(new PrintStream("文件名"));

    系统信息:

      1: public static void main(String[] args)
    
      2: {
    
      3:     Properties  prop=System.getProperties();
    
      4:      
    
      5:     prop.list(new PrintStream("文件名"));
    
      6: }
  • 相关阅读:
    P2319 [HNOI2006]超级英雄
    P4302 [SCOI2003]字符串折叠
    P1122 最大子树和
    HDU——2089 不要62
    P4555 最长双回文串
    P1463 [HAOI2007]反素数
    P2412 查单词
    P2787 语文1(chin1)- 理理思维
    P3078 [USACO13MAR]扑克牌型Poker Hands
    ubuntu中desktop与alternate版本的区别(转载)
  • 原文地址:https://www.cnblogs.com/mandy920213/p/3535229.html
Copyright © 2011-2022 走看看