Java 标准输入输出流以及其重定向

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("发生错误了!");
}

猜你喜欢

转载自blog.csdn.net/mengxianglong123/article/details/88364458