黑马程序员——System类常用方法及流对象操作规律

来源:互联网 发布:最优化理论 课程 推荐 编辑:程序博客网 时间:2024/06/01 08:00

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

System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。
由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用

读取键盘录入。
System.out:对应的是标准的输出设备。控制台
System.in:对应的标准的输入设备。键盘

通过键盘录入数据
当录入一行数据后,就将该行进行打印(打印为大写)。
如果录入的事over,那么停止录入。
示例:

import java.io.*;class  TransStreamDemo{    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')            {                String s=sb.toString();                if("over".equals(s))                    break;                System.out.println(s.toUpperCase());                sb.delete(0,sb.length());            }            else                sb.append((char)ch);            }        /*        int by=in.read();        int by1=in.read();        //char by2=in.read();会报错        int by2=in.read();        System.out.println(by+"; "+(char)by1+"; "+by2);        //返回的是ascII码        System.out.println('\r'+0);//13            System.out.println('\n'+0);//10        */    }}

通过键盘录入数据,当录入一行数据后,就将该行进行打印(打印为大写)。
其实就是readLine方法
readLine方法就是字符流BufferedReader类中的方法。
而键盘录入的read方法是字节流InputStream.
可以将字节流转成字符流在使用字符流缓冲区的readLine方法呢?
inputStreamReader
字节通向字符的桥梁

OutputStreamWriter
通过字符转向字节

import java.io.*;class  TransStreamDemo2{    public static void main(String[] args) throws IOException    {        //InputStream in=System.in;        //将字节流对象转换成字符流对象。使用转换流        //InputStreamReader isr=new InputStreamReader(in);        ///通过字符流缓冲区进行对他进行装饰        //BufferedReader bufr =new BufferedReader(isr);        //键盘录入最常见写法        BufferedReader bufr=            new BufferedReader(new InputStreamReader(System.in));        BufferedWriter bufw =            new BufferedWriter(new OutputStreamWriter(System.out));        //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;            bufw.write(line.toUpperCase());            bufw.newLine();            bufw.flush();        }        bufr.close();    }}

常见的输入和输出示例:

示例1

import java.io.*;class  TransStreamDemo3{    public static void main(String[] args) throws IOException    {        //InputStream in=System.in;        //将字节流对象转换成字符流对象。使用转换流        //InputStreamReader isr=new InputStreamReader(in);        ///通过字符流缓冲区进行对他进行装饰        //BufferedReader bufr =new BufferedReader(isr);        //键盘录入最常见写法        /*        BufferedReader bufr=            new BufferedReader(new InputStreamReader(System.in));        BufferedWriter bufw =            new BufferedWriter(new OutputStreamWriter(new FileOutputStream("e:\\helloword.txt")));        将键盘内容录入存入一个文件中        */        //把文件打印到控制台        BufferedReader bufr=            new BufferedReader(new InputStreamReader(new FileInputStream("e:\\课件.txt")));        BufferedWriter bufw =            new BufferedWriter(new OutputStreamWriter(System.out));        //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;            bufw.write(line.toUpperCase());            bufw.newLine();            bufw.flush();        }        bufr.close();    }}

示例2

import java.io.*;class  TransStreamDemo4{    public static void main(String[] args) throws IOException    {        //System.setIn(new FileInputStream("e:\\helloword.txt"));        System.setOut(new PrintStream("e:\\zz.txt"));        BufferedReader bufr=            new BufferedReader(new InputStreamReader(System.in));        BufferedWriter bufw =            new BufferedWriter(new OutputStreamWriter(System.out));        //将键盘内容录入存入一个文件中        //把文件打印到控制台        /*        BufferedReader bufr=            new BufferedReader(new InputStreamReader(new FileInputStream("e:\\课件.txt")));        BufferedWriter bufw =            new BufferedWriter(new OutputStreamWriter(System.out));        */        //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;            bufw.write(line.toUpperCase());            bufw.newLine();            bufw.flush();        }        bufr.close();    }}

将程序中抛出的异常文件保存在文件夹中
示例如下
//将异常信息保存在文件中

import java.io.*;import java.util.*;//Dteimport 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("e:\\excepiton-4.log");                ps.println(s);                System.setOut(ps);                //将异常保存在文本文件中,限定            //System.setOut(new PrintStream("e:\\excepiton.log"));//限定保存在文件夹            //e.printStackTrace(System.out);//默认是控制台            //e.printStackTrace(System.out);            //e.printStackTrace(new PrintStream("e:\\question.txt"));            //将异常保存在文本文件中。            }            catch (Exception ex)            {                throw new RuntimeException("日志文件创建失败");            }            e.printStackTrace(System.out);        }    }}/*实际建立日志信息工具包log4j*/

文件夹示例:


static Properties getProperties()
确定当前的系统属性。
将 getProperty(String) 方法使用的当前系统属性集合作为 Properties 对象返回。如果没有当前系统属性集合,则先创建并初始化一个系统属性集合。
调用示例:

import java.util.*;import java.io.*;class  SystemInfo{    public static void main(String[] args) throws IOException    {        Properties prop=System.getProperties();        //System.out.println(prop);        prop.list(new PrintStream("sysinfo.txt"));    }}

保存的文件夹显示的结果:

流对象的基本操作规律:

通过三个明确来完成:

1,明确源和目的
源:输入流 InputStream Reader.
目的:输出流 OutputStream Writer.
2.操作的数据是否是纯文本。
是:字符流
不是;字节流

3.当体系明确后,再明确要使用哪个具体的对象。
通过设备来进行区分:
设备包括内存,硬盘,键盘。
源设设备:内存,硬盘,键盘。
目的设备:内存,硬盘,控制台。

举例演示思路:
1.将一个文本文件中数据存储到另一个文件中,复制文件
源:使用读取流InputStream Reader
文本文件:Reader
明确要使用体系中的哪个对象。
明确设备:硬盘,上的一个文件
Reader体系中可以操作文件的 FileReader
是否需要提高效率:是:加入Reader体系中的缓冲区BufferedReader
FileReader fr=new FileReader(“a.txt”);
BufferedReader bufr=new BufferReader(fr);

目的:OutputStream Writer目的是不是纯文本呢.是:Writer设备:硬盘,一个文件。Writer体系中可以操作文件的对象FileWriter.是否需要提高效率:是。加入Writer体系中缓冲区 BufferWriterFileWriter fw=new FileWriter("b.txt");BufferWriter bufw=new BuferWriter(fw);

2.需求:将键盘录入的数据保存到文件中
这个需求中有源和目的都存在
那么分别分析
源:InputStream Reader
是不是纯文本?是:Reader

设备:键盘。对应的对象是System.in:不是选择Reader吗 System.in对应的不是字节流吗?为了操作键盘的文本数据方便。将其转成字符流按照字符串操作最方便。所以既然明确了reader,那么就将ystem.in转成字符流用到了Reader体系中的转换流InputStreamReaderInputStreamReader isr=new InputStreamReader(Syetem.in);需要提高效率吗?需要 BufferReaderBufferedReader bufr=newBufferedReader(isr);目的;OutputStream Writer是否是纯文本?是!Writer。设备:硬盘。一个文件。使用FileWriter.FileWriter fw =new FileWriter("c.txt");只需要提高效率吗?BufferedWriter bufw=new BufferedWriter(fw);

扩展一下,想要把录入的文件按照指定的编码表(utf-8),将数据存到文件中。目的:OutputStream Writer是否存文本?是:Writer设备:硬盘。一个文件。使用FileWriter但是FileWriter是使用的默认编码表。GBK.但是要存储时,需要加入指定编码表。而指定的编码表只有转换刘可以指定。所以要使用的对象是OutputStreamWriter.而该转换刘对象要接收一个字符流,而且还可以操作文件的字节输出流FileOutStreamOutputStreamWriter osw=new PutputStreamWriter(new FileOutputStream(d.txt),"UTF-8");//FileWriter Fw=new FileWriter("c.txt");需要提高效率吗?需要。BufferedWriter bufw=new BufferedWriter(osw);字符和字节之间的桥梁,通常涉及到字符编码转换时需要用到转换流。

示例
将一个文本数据打印到控制台上

import java.io.*;class  TransS{    public static void main(String[] args) throws IOException    {        //InputStream in=System.in;        //将字节流对象转换成字符流对象。使用转换流        //InputStreamReader isr=new InputStreamReader(in);        ///通过字符流缓冲区进行对他进行装饰        //BufferedReader bufr =new BufferedReader(isr);        //键盘录入最常见写法        /*        BufferedReader bufr=            new BufferedReader(new InputStreamReader(System.in));        BufferedWriter bufw =            new BufferedWriter(new OutputStreamWriter(new FileOutputStream("e:\\helloword.txt"),"UTF-8"));        将键盘内容录入存入一个文件中 默认GBK         */        //把文件打印到控制台        BufferedReader bufr=            new BufferedReader(new InputStreamReader(new FileInputStream("e:\\课件.txt")));        BufferedWriter bufw =            new BufferedWriter(new OutputStreamWriter(System.out));        //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;            bufw.write(line.toUpperCase());            bufw.newLine();            bufw.flush();        }        bufr.close();    }}

0 0