Java笔记-I/O流之系统标准输入输出

Java的标准输入和输出介绍

Java遵循标准I/O的模型,提供了Syetem.in,System.out,以及System.err。

System.out 是一个已经预先处理过的,被包装成PrintStream的对象。

System.err 和 System.out 一样,也是一个PrintStream

但是 System.in 不是,它是一个未经处理的InputStream。也就是说,可以直接使用 System.out 和 System.err 打印输出到控制台,但是使用System.in直接读取数据不可以,必须先做处理。


System.in

System.in:输入,根据键盘录入控制台。
它是 System 类给我们提供的,也是由 System 类给我们实例化的,我们办不到。


System.in使用方法举例

//去掉main后的数字分别运行
// 1.System.in 最简单的读取字节数组,对控制台输入长度有限制
public static void main1(String[] args) throws IOException {
    InputStream input = System.in;
    byte[] bs = new byte[100];
    System.out.println("请输入:");
    // 从控制台读取
    int total = input.read(bs);
    System.out.println("输入了:" + new String(bs, 0, total));
    input.close();
}

// 2.System.in 用BufferedReader改进,对一行长度无限制
public static void main2(String[] args) throws IOException {
    InputStream input = System.in;
    BufferedReader br = new BufferedReader(new InputStreamReader(input));
    System.out.println("请输入:");
    // 从控制台读取
    String str = br.readLine();
    System.out.println("输入了:" + str);
    input.close();
}

System.out

System.out:输出,输出到控制台。


System.out使用方法举例

//去掉main后数字分别运行
// 1.System.out 简单实现向控制台输出
public static void main1(String[] args) throws IOException {
    OutputStream output = System.out;
    output.write("你好啊".getBytes());
    output.close();
}

// 2.System.out 用BufferedWriter改进
public static void main2(String[] args) throws IOException {
    OutputStream output = System.out;
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(output));
    bw.write("哈哈哈");
    // 换行
    bw.newLine();
    bw.write("换行了!");
    bw.close();
}

System.err

System.err:在控制台输出的内容为红色字体!

演示使用:

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("请输入数字:");
    if (in.hasNextInt()) {
        System.out.println("输入的是:" + in.nextInt());
    } else {
        System.err.println("输入的不是数字!");
    }
}
//如果输入的不是数字
//syse提示的内容在控制台用红色字体显示,而不是syso的黑色字体

Scanner对SystemIO的支持

用Scanner读系统文件

举例:

// 用Scanner读文件
public static void main(String[] args) throws IOException {
    Scanner input = new Scanner(new FileInputStream("D:\\唐诗三百首.txt"));
    while (input.hasNextLine()) {
        System.out.println(input.nextLine());
    }
    input.close();
}

输入输出重定向

介绍

  • System.setErr(err);:修改syse的方向
  • System.setIn(in);:修改System.in的读取方向
  • System.setOut(out);:修改syso的输出方向 一般用来做错误日志的输出

以上三个 是输出输入重定向,可以让System.in或者syso的方向改变,不从控制台读或写,读写到别的地方。


System.in使用示范

public static void main(String[] args) throws IOException {
    //直接将 System.in 指向 D:\\唐诗三百首.txt
    System.setIn(new FileInputStream("D:\\唐诗三百首.txt"));
    //所以这里的 input 不再指向控制台,而从D:\\唐诗三百首.txt读
    Scanner input = new Scanner(System.in);
    while (input.hasNextLine()) {
        System.out.println(input.nextLine());
    }
    input.close();
}

System.out使用示范

主要用来打印错误日志

public static void main(String[] args) throws IOException {
    //System.out指向D:\\错误日志.txt
    //这里为了方便查看写的txt格式,实际常用.log格式
    System.setOut(new PrintStream(new FileOutputStream("D:\\错误日志.txt")));
    //所以不再在控制台输出,而输出在D:\\错误日志.txt文件中
    System.out.println("发生错误了!");
}

System.err使用示范

注意:例子中我输出到了 txt 文件中,所以字体颜色是黑色,不同于控制台中的红色了。

public static void main(String[] args) throws IOException {
    //System.err指向D:\\错误记录.txt
    System.setErr(new PrintStream(new FileOutputStream("D:\\错误记录.txt")));
    //所以直接syse也不在控制台输出,而是输出到文件D:\\错误记录.txt 中
    System.err.println("我也出错了!");
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值