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