zoukankan      html  css  js  c++  java
  • 黑马程序员——JAVA基础之标准输入输出流

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

     

    标准输入输出流:

       System中的基本字段,in,out

       它们各代表了系统标准的输入和输出设备。

        默认输入设备是键盘,输出设备是显示器。

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

        System.out的类型是PrintStream是OutputStream的子类FilterOutputStream 的子类,对应的是标准输出设备,控制台。

     

     

    import java.io.IOException;
    import java.io.InputStream;
    
    /**
    需求: 
    通过键盘录入数据。 
    当录入一行数据后,就将该行数据进行打印。 
    如果录入的数据是over,那么停止录入。
    */
    
    class SystemDemo
    {
    	public static void main(String[] args) throws IOException
    	{
    		InputStream in = System.in;
    		StringBuffer sb = new StringBuffer();
    
    		while (true)
    		{
    			int ch = in.read();
    			if (ch == '
    ')
    				continue;
    			if (ch == '
    ')
    			{
    				String s = sb.toString();
    				
    				if (s.equals("over"))
    					break;
    				System.out.println(s.toUpperCase());
    				sb.delete(0, sb.length());
    			}
    			else
    			{
    				sb.append((char)ch);
    			}
    		}
    	}
    }
    


     

    通过刚才的键盘录入一行数据并打印其大写,发现其实就是读一行数据的原理。也就是readLine方法。 

    readLine方法是字符流BufferedReader类中的方法。而键盘录入的read方法是字节流InputStream的方法。

    import java.io.*;
    class SystemDemo
    {
    	public static void main(String[] args) throws IOException
    	{
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    		//键盘最常见写法
    		String line = null;
    
    		while ((line = br.readLine()) != null)
    		{
    			if (line.equals("over"))
    				break;
    			bw.write(line.toUpperCase());
    			bw.newLine();
    			bw.flush();
    		}
    		br.close();
    		bw.close();
    	}
    }
    


     

    流操作的基本规律:  
     
    通过三个明确来完成。
     
    1,明确源和目的。

    源:输入流。InputStream  Reader

    目的:输出流。OutputStream  Writer。

     
    2,操作的数据是否是纯文本。

    是:字符流。     不是:字节流。
     
    3,当体系明确后,在明确要使用哪个具体的对象。

    通过设备来进行区分:

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

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

    分析过程示例:

    将一个文本文件中数据存储到另一个文件中。复制文件。

    源:因为是源,所以使用读取流。InputStream Reader 

    是不是操作文本文件。

    是!这时就可以选择Reader

    这样体系就明确了。 
     

    接下来明确要使用该体系中的哪个对象。 

    明确设备:硬盘。上一个文件。

    Reader体系中可以操作文件的对象是 FileReader 
     
    是否需要提高效率:是!。加入Reader体系中缓冲区 BufferedReader.
     
        FileReader fr = new FileReader("a.txt");
        BufferedReader bufr = new BufferedReader(fr); 
     

    目的:OutputStream Writer

    是否是纯文本。

    是!Writer。

    设备:硬盘,一个文件。

    Writer体系中可以操作文件的对象FileWriter。 

    是否需要提高效率:是!。加入Writer体系中缓冲区 BufferedWriter
        
        FileWriter fw = new FileWriter("b.txt");
        BufferedWriter bufw = new BufferedWriter(fw);


    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintStream;
    
    class  SystemDemo  
    {  
        public static void main(String[] args) throws IOException  
        {  
            System.setIn(new FileInputStream("Test.txt"));  
      
            System.setOut(new PrintStream("zzz.txt"));  
      
            //键盘的最常见写法。  
            BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));  
          
            BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));  
      
            String line = null;  
      
            while((line=bufr.readLine())!=null)  
            {  
                if("over".equals(line))  
                    break;  
                bufw.write(line.toUpperCase());  
                bufw.newLine();  
                bufw.flush();  
            }  
      
            bufr.close();  
      
        }  
    }  
    


     

    打印异常日志文件:

    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");
    				String s = sdf.format(d);
    
    				PrintStream ps = new PrintStream("exeception.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.getProperties();
    		prop.list(new PrintStream("sysinfo.txt"));
    	}
    }
    


     


     
    流的基本应用小节:

           流是用来处理数据的。

           处理数据时,一定要先明确数据源,与数据目的地(数据汇)。

           数据源可以是文件,可以是键盘。

           数据目的地可以是文件、显示器或者其他设备。

           而流只是在帮助数据进行传输,并对传输的数据进行处理,比如过滤处理.转换处理等。

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

  • 相关阅读:
    扒皮下音悦台的“返回顶部”图标效果
    扒皮下京东首页楼层图标的动画效果实现方式
    总结前端开发中的一些特殊规范
    用JS识别各版本浏览器
    各主流浏览器内核介绍
    CSS百分比定义高度的冷知识
    图解js中常用的判断浏览器窗体、用户屏幕可视区域大小位置的方法
    从一个简单例子来理解js引用类型指针的工作方式
    仿京东首页商品分类底部色标随鼠标移动特效
    知乎网首页一个延时交互的小思路
  • 原文地址:https://www.cnblogs.com/runwind/p/4212178.html
Copyright © 2011-2022 走看看