java中IO(五):系统输入输出讲解

java中IO(五):系统输入输出讲解

介绍

在io(四)当中,我们发现PrintStreamPrintWriter中的各种方法和System中的许多方法相同,比如:print()、println(),所以本次就讲讲java系统的输入输出。

讲解

io12

我们观察System中字段信息,发现有三个字段信息,包括err、in、out,我们较常用就是in和out,下面进行讲解。

一、out和err

  • out:

    PrintStream 类型,“标准”输出流。该流已经打开并且准备接受输出数据。通常,此流对应于显示输出或主机环境或用户指定的另一个输出目标。 对于简单的独立Java应用程序,写一行输出数据的典型方法是:System.out.println(data),请参见类PrintStream中的println方法。

  • err:

    PrintStream类型,“标准”错误输出流。该流已经打开并且准备接受输出数据。 通常,此流对应于显示输出或主机环境或用户指定的另一个输出目标。按照约定,即使主要输出流(变量out的值)已重定向到文件或其他目标位置,该输出流也用于显示错误消息或其他信息,这些信息应引起用户的立即注意。通常不会持续监控。

    例子代码:

public static void main(String[] args) {
        
    try {
        System.err.println("hello world");
        Integer.parseInt("abc");
    } catch (Exception e) {
        //TODO: handle exception
        System.err.println(e);
        System.out.println(e);
    }
}

结果:

hello world
java.lang.NumberFormatException: For input string: "abc"
java.lang.NumberFormatException: For input string: "abc"

发现结果一样。其实在现在System.errSystem.out没有什么区别,但是人们更习惯于使用System.out,并且System.out作为打印流的实例,本质上也是OutputStream,也可以使用write(进行输出,不过输出在屏幕上而已。

二、in

	标准”输入流,`InputStream`类型。该流已经打开,可以提供输入数据了。通常,此流对应于键盘输入或主机环境或用户指定的另一个输入源。

​ 看他是InputStream类型,是否可以通过java的io模式进行输入呢?

​ 是肯定可以的,但是会有一些问题,比如我们利用一个字节数组,然后利用System.in的read函数进行读入,就可以完成。如下:

 public static void main(String[] args) {
       InputStream iStream = System.in;
       byte[] data = new byte[1024];
       try {
            System.out.print("请输入:");
           int temp = iStream.read(data);//读取数据
           System.out.println("刚才输入的是:"+new String(data));
            
       } catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
       
    }

结果:

请输入:hello world
刚才输入的是:hello world

这样似乎完成了键盘的输入,但是我们发现开辟的字节数组是定长,如果万一输入的长度超过了字节数组的长度,就会造成数据读取不完整,只能接收部分。当然我们可以使用StringBuilder或者内存流配合着使用,达到我们随意输入的目的,但是太过麻烦,java为此出现了Scanner,解决了System.in的输入问题(关于Scanner的内容我选择放到下节再总结)。

总结

java中系统输入输出也是java中的io问题,本次简单的总结了一下输入输出流的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值