在Java中,我们可以通过几种方式从键盘读取数据?
java.io包提供了各种类来读取来自各种源和目标的写入数据。
您可以使用各种类(例如Scanner,BufferedReader,InputStreamReader,Console等)从用户(键盘)读取数据。
使用Scanner类
从Java1.5开始引入Scanner类。此类接受File,InputStream,Path和String对象,使用正则表达式逐个令牌读取所有原始数据类型和String(从给定的源)令牌。默认情况下,空格被视为定界符(将数据分成令牌)。
要从键盘读取数据,您需要使用标准输入作为源(System.in)。对于每个数据类型的nextXXX()
被设置,即,nextInt()
,nextShort()
,nextFloat()
,nextLong()
,nextBigDecimal()
,nextBigInteger()
,nextLong()
,nextShort()
,nextDouble()
,nextByte()
,nextFloat()
,next()
。
示例
以下Java程序使用Scanner类从用户读取数据。
import java.util.Scanner; class Student{ String name; int age; float percent; boolean isLocal; char grade; Student(String name, int age, float percent, boolean isLocal, char grade){ this.name = name; this.age = age; this.percent = percent; this.isLocal = isLocal; this.grade = grade; } public void displayDetails(){ System.out.println("Details.............."); System.out.println("Name: "+this.name); System.out.println("Age: "+this.age); System.out.println("Percent: "+this.percent); if(this.isLocal) { System.out.println("Nationality: Indian"); }else { System.out.println("Nationality: Foreigner"); } System.out.println("Grade: "+this.grade); } } public class ReadData { public static void main(String args[]) { Scanner sc =new Scanner(System.in); System.out.println("Enter your name: "); String name = sc.next(); System.out.println("Enter your age: "); int age = sc.nextInt(); System.out.println("Enter your percent: "); float percent = sc.nextFloat(); System.out.println("Are you local (enter true or false): "); boolean isLocal = sc.nextBoolean(); System.out.println("Enter your grade(enter A, or, B or, C or, D): "); char grade = sc.next().toCharArray()[0]; Student std = new Student(name, age, percent, isLocal, grade); std.displayDetails(); } }
输出结果
Enter your name: Krishna Enter your age: 25 Enter your percent: 86 Are you local (enter true or false): true Enter your grade(enter A, or, B or, C or, D): A Details.............. Name: Krishna Age: 25 Percent: 86.0 Nationality: Indian Grade: A
使用BufferedReader
Java的BufferedReader类用于从指定的源读取字符流(字符输入流)。此类的构造函数接受InputStream对象作为参数,您可以传递InputStreamReader。
示例
以下Java程序使用BufferedReader 类从用户读取数据。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class Student{ String name; int age; float percent; boolean isLocal; char grade; Student(String name, int age, float percent, boolean isLocal, char grade){ this.name = name; this.age = age; this.percent = percent; this.isLocal = isLocal; this.grade = grade; } public void displayDetails(){ System.out.println("Details.............."); System.out.println("Name: "+this.name); System.out.println("Age: "+this.age); System.out.println("Percent: "+this.percent); if(this.isLocal) { System.out.println("Nationality: Indian"); }else { System.out.println("Nationality: Foreigner"); } System.out.println("Grade: "+this.grade); } } public class ReadData { public static void main(String args[]) throws IOException { BufferedReader reader =new BufferedReader(new InputStreamReader(System.in)); System.out.println("Enter your name: "); String name = reader.readLine(); System.out.println("Enter your age: "); int age = Integer.parseInt(reader.readLine()); System.out.println("Enter your percent: "); float percent = Float.parseFloat(reader.readLine()); System.out.println("Are you local (enter true or false): "); boolean isLocal = Boolean.parseBoolean(reader.readLine()); System.out.println("Enter your grade(enter A, or, B or, C or, D): "); char grade = (char) reader.read(); Student std = new Student(name, age, percent, isLocal, grade); std.displayDetails(); } }
输出结果
Enter your name: Krishna Enter your age: 25 Enter your percent: 86 Are you local (enter true or false): true Enter your grade(enter A, or, B or, C or, D): A Details.............. Name: Krishna Age: 25 Percent: 86.0 Nationality: Indian Grade: A
使用Console类
此类用于从控制台(键盘/屏幕)设备写入/读取数据。它提供了readLine() 方法,该方法从键盘读取一行。您可以使用console()方法获取Console类的对象。
注意-如果您尝试在非交互式环境(例如IDE)中执行此程序,则该程序将无法正常工作。
示例
以下Java程序使用Console 类从用户读取数据。
import java.io.BufferedReader; import java.io.Console; import java.io.IOException; import java.io.InputStreamReader; class Student{ String name; int age; float percent; boolean isLocal; char grade; Student(String name, int age, float percent, boolean isLocal, char grade){ this.name = name; this.age = age; this.percent = percent; this.isLocal = isLocal; this.grade = grade; } public void displayDetails(){ System.out.println("Details.............."); System.out.println("Name: "+this.name); System.out.println("Age: "+this.age); System.out.println("Percent: "+this.percent); if(this.isLocal) { System.out.println("Nationality: Indian"); }else { System.out.println("Nationality: Foreigner"); } System.out.println("Grade: "+this.grade); } } public class ReadData { public static void main(String args[]) throws IOException { Console console = System.console(); if (console == null) { System.out.println("Console is not supported"); System.exit(1); } System.out.println("Enter your name: "); String name = console.readLine(); System.out.println("Enter your age: "); int age = Integer.parseInt(console.readLine()); System.out.println("Enter your percent: "); float percent = Float.parseFloat(console.readLine()); System.out.println("Are you local (enter true or false): "); boolean isLocal = Boolean.parseBoolean(console.readLine()); System.out.println("Enter your grade(enter A, or, B or, C or, D): "); char grade = console.readLine().toCharArray()[0]; Student std = new Student(name, age, percent, isLocal, grade); std.displayDetails(); } }
输出结果
Enter your name: Krishna Enter your age: 26 Enter your percent: 86 Are you local (enter true or false): true Enter your grade(enter A, or, B or, C or, D): A Details.............. Name: Krishna Age: 26 Percent: 86.0 Nationality: Indian Grade: A