การรับค่าบนแป้นพิมพ์ ด้วย BufferedReader ร่วมกับ InputStreamReader
ก่อนอื่นเราต้อง import java.io.* เพื่อบอกให้โปรแกรมทราบว่าเราต้องการใช้คลาสนี้
จะมีรูปแบบการเรียกใช้ ดังนี้
BufferedReader str = new BufferedReader(new InputStreamReader(System.in));
จากโค้ด เราจะเห็นว่าเราได้สร้างอ็อบเจ็คขึ้นมาชื่อว่า str ซึ่งเป็นออบเจ็คที่สร้างขึ้นจากคลาส BufferedReader ซึ่งในอ็อบเจ็คนี้ เราก็ได้สร้างออบเจ็คขึ้นมาอีกอ็อบเจ็คหนึ่ง เป็นอ็อบเจ็คที่สร้างขึ้นจากคลาส InputStreamReader ซึ่งอ็อบเจ็คนี้ได้รับค่า System.in ซึ่งหมายถึงแป้นพิมพ์นั่นเอง
เมื่อได้อ็อบเจ็คมาแล้ว เราจะใช้ method readLine(); เพื่อรับค่าเป็นสตริง มีวิธีการใช้ดังนี้
String s = str.readLine(); //อ่านออกมาเป็นสตริง
int i = str.read(); //คืนค่าเป็น int เป็นตัวเลข ASCII เพียงตัวแรกตัวเดียว
เมื่อมีการใช้ method เหล่านี้จะต้องมีการ กำหนดทิศทางของ Exception ขึ้นทุกครั้ง วิธีการที่ง่ายที่สุดก็คือ throws Exception หรือ throws IOException ไว้ที่หัว method เพื่อบอกว่าเมื่อเกิด Exception ขึ้น ให้โยนทิ้งได้เลย
เรามาดูตัวอย่างกันเลยดีกว่า
ตัวอย่างที่ 1
import java.io.*; public class streamin { public static void main(String args[]) throws IOException{ BufferedReader str = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Insert Name : "); String s = str.readLine(); System.out.println("Yourname " + s ); } }
Output ที่ได้คือ
Insert Name : แล้วเคอเซอร์จะหยุดเพื่อให้กรอกข้อมูล เช่น เรากรอก Doesystem บรรทัดต่อไปจะเป็น
Yourname Doesystem
ตัวอย่างที่ 2
import java.io.*; public class streamin { public static void main(String args[]) { BufferedReader str = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Insert Name : "); String s = ""; try{ s = str.readLine(); } catch(Exception e){ System.out.print(e); } System.out.println("Yourname " + s ); } }
Output ที่ได้คือ
output ที่ได้ในตัวอย่างนี้จะเหมือนกับตัวอย่างแรก แต่โปรแกรมนี้เมื่อเกิด Exception ขึ้นจะดักจับ และปริ้นออกหน้าจอว่า เกิด Exception ประเภทไหน ซึ่งต่างจากแบบแรกที่เมื่อเกิด Exception แล้ว จะทำการโยนทิ้งไป
ตัวอย่างที่ 3
import java.io.*; public class streamin { public static void main(String args[]) throws IOException{ BufferedReader str = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Insert Number : "); int s = str.read(); System.out.println("Convert to ACSII : " + s ); } }
Output ที่ได้คือ
Insert Number : 2
Convert to ACSII : 50
Insert Number : 234
Convert to ACSII : 50
ตัวอย่างนี้รับค่าโดยใช้ method read() ซึ่งจะรับค่าจากแป้นพิมพ์เพียงตัวแรกตัวเดียว ถึงจะกรอกไปกี่ตัวก็ตาม รับแล้วจะคืนค่าเป็น int ซึ่งค่าที่ได้ คือค่าในรหัส ASCII
ดูตาราง ASCII ได้ที่ www.doesystem.com/f64115f363f48c2671cca53eefb98bd0/ตาราง-ASCII.htm
ตัวอย่างที่ 4
import java.io.*; public class streamin { public static void main(String args[]) throws IOException{ BufferedReader str = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Insert String : "); char s = (char)str.read(); System.out.println("First String : " + s ); } }
Output ที่ได้คือ
Insert String : 123456
First String : 1
Insert String : Doesystem
First String : D
Insert String : r
First String : r
ตัวอย่างนี้ เป็นการปรับใช้จากตัวอย่างที่ 2 นั่นคือ จากเป็นรหัส ASCII เราก็ทำการเปลี่ยนให้เป็นเป็นอักขระ