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("我也出错了!");
}