Java是一门面向对象的编程语言,它提供了丰富的类库,用于处理各种类型的输入和输出。在Java中,基本输入和输出指的是使用System类的in和out字段,分别表示标准输入流和标准输出流。标准输入流通常是键盘,标准输出流通常是控制台。我们可以使用Scanner类来从标准输入流读取数据,使用System类的print方法或者PrintStream类的println方法来向标准输出流写入数据。
Scanner类
Scanner类是一个文本扫描器,它可以从一个输入流中解析出基本类型和字符串数据。我们可以使用Scanner类的构造方法来创建一个Scanner对象,并传入一个输入流作为参数,例如:
Scanner sc = new Scanner(System.in); //创建一个Scanner对象,从标准输入流读取数据
然后,我们可以使用Scanner类的各种方法来读取不同类型的数据,例如:
int a = sc.nextInt(); //读取一个整数
double b = sc.nextDouble(); //读取一个浮点数
String c = sc.next(); //读取一个单词(以空白符为分隔符)
String d = sc.nextLine(); //读取一行文本(以换行符为结束符)
boolean e = sc.hasNext(); //判断是否还有下一个输入
boolean f = sc.hasNextInt(); //判断下一个输入是否是一个整数
需要注意的是,当我们使用nextLine方法时,如果之前使用了其他方法读取了数据,那么nextLine方法会读取剩余的换行符,并返回一个空字符串。为了避免这种情况,我们可以在nextLine方法之前调用一次nextLine方法来清除缓冲区中的换行符,例如:
int a = sc.nextInt(); //读取一个整数
sc.nextLine(); //清除换行符
String b = sc.nextLine(); //读取一行文本
另外,当我们使用Scanner类读取数据时,需要注意关闭Scanner对象,以释放资源,例如:
sc.close(); //关闭Scanner对象
System类和PrintStream类
System类是一个系统相关的工具类,它提供了一些静态字段和方法,用于访问系统属性和资源。其中,System类的in和out字段分别表示标准输入流和标准输出流。我们可以使用System类的setIn方法和setOut方法来改变这两个字段的值,例如:
System.setIn(new FileInputStream("input.txt")); //将标准输入流重定向到文件input.txt
System.setOut(new PrintStream("output.txt")); //将标准输出流重定向到文件output.txt
然后,我们可以使用System类的print方法或者PrintStream类的println方法来向标准输出流写入数据,例如:
System.out.print("Hello"); //向标准输出流写入字符串Hello
System.out.println("World"); //向标准输出流写入字符串World,并换行
需要注意的是,当我们使用print方法或者println方法时,数据并不会立即写入到目标设备中,而是先存放在缓冲区中。为了确保数据被及时写入到目标设备中,我们可以使用flush方法来刷新缓冲区,例如:
System.out.flush(); //刷新缓冲区