O Streams. Monday, November 5, 12

Chapter 8 I/O Streams Monday, November 5, 12 How to read data from keyboard • You have to use I/O Stream classes • For example, System.in is one of...
9 downloads 2 Views 1MB Size
Chapter 8 I/O Streams

Monday, November 5, 12

How to read data from keyboard • You have to use I/O Stream classes • For example, System.in is one of the stream classes I/O

Data Stream (Read) Data Stream (Write)

Monday, November 5, 12

Java Program

Stream types • Binary Stream – InputStream – OutputStream

• Character Stream – Reader – Writer

Monday, November 5, 12

InputStream • public abstract int read() throws IOException – เป็น Abstract Method ซึ่งส่งค่ากลับเป็นค่า int ที่อ่านได้ มีค่าระหว่าง 0 ถึง 255 ในกรณีที่อ่านถึงตําแหน่งสุดท้าย ของ Stream หรือมีการปิด Stream จะส่งค่ากลับเป็น -1 ถ้าเกิดความผิดพลาดขึ้น IOException จะถูกส่งออกมา

üpublic int read(byte[] b) throws IOException

Monday, November 5, 12

Example of InputStream (System.in) import java.io.*; Can you print input with class ReadFromKeyboard { println?

public static void main(String[] args)

{ Open API

byte[] input = new byte[100];

System.out.print("Please enter your name here: ");

try{

System.in.read(input);

System.out.println("Your name is " + new String(input) ); 10.

} 11.

catch (IOException e){ 12.

System.out.println( e.getMessage() ); 13.

} 14. } 15.} 16.---------- Java Output---------17.Please enter your name here: Thirapon 18.Your name is Thirapon

1. 2. 3. 4. 5. 6. 7. 8. 9.

Monday, November 5, 12

การใช้ BufferedInputStream import java.io.*; class ReadFromKeyboardUsingBuffered {

public static void main(String[] args)

{

byte[] input = new byte[1024];

BufferedInputStream in = new BufferedInputStream(System.in); 7.

System.out.print("Please enter your name here: "); 8.

try{ 9.

in.read(input); 10.

System.out.println("Your name is " + new String(input) ); 11.

} 12.

catch (IOException e){ 13.

System.out.println( e.getMessage() ); 14.

} 15. } 16.}

1. 2. 3. 4. 5. 6.

Monday, November 5, 12

Character Stream classes • Reader – In class BufferedReader • You can use readLind() to read 1 one from keyboard. This method is useful.

• Writer

Important: remember this

• Binary Stream

– InputStream – OutputStream

InputStream

InputStreamReader

• Character Stream – Reader – Writer

Monday, November 5, 12

Reader

Example of BufferedReader

1. import java.io.*; 2. class KeyboardReader { 3. public static void main(String[] args) 4. { 5.

String name=""; 6.

BufferedReader keyboard = new BufferedReader( 7.



new InputStreamReader (System.in) ); 8.

System.out.print("Please enter your name here: "); 9.

try{ 10.

name = keyboard.readLine() ; 11.

} 12.

catch (IOException e){ 13.

System.out.println( e.getMessage() ); 14.

System.exit(1); 15.

} 16.

System.out.println("Your name is " + name); InputStreamReader isr = new InputStreamReader (System.in 17. } BufferedReader keyboard = new BufferedReader(isr);

Monday, November 5, 12

Example of reading integer from keyboard 1. import java.io.*; 2. class ReadIntFromKeyboard { 3. public static void main(String[] args) 4. { 5.

int value=0; 6.

BufferedReader keyboard = new BufferedReader( 7.



new InputStreamReader (System.in) ); 8.

System.out.print("Please enter your number here: "); 9.

try { 10.

String input = keyboard.readLine() ; 11.

value = Integer.parseInt(input); 12.

} 13.

catch (NumberFormatException e) { 14.

System.out.println("Error, please enter only integer number"); 15.

16.

17.

18.

19.

20.

Monday, November 5, 12

System.exit(1); } catch (IOException e) {

System.out.println( "Error, cannot read from keyboard");

System.exit(1); }

StreamTokenizer • Easy to perform input validation – double nval ถ้าข้อมูลที่อ่านมาเป็นตัวเลข ค่าของตัวเลขจะเก็บไว้ในตัวแปร nval – String sval ถ้าข้อมูลที่อ่านเป็น String ค่าของ Sting จะอยู่ใน sval – int ttype ใช้ในการทดสอบว่าค่าที่อ่านเป็นข้อมูลชนิดใด เช่นถ้า ttype เท่ากับ TT_NUMBER หมายถึงข้อมูลที่อ่านเป็นชนิดตัวเลข ถ้า ttype เท่ากับ TT_WORD แสดงว่าข้อมูลที่อ่านเป็นชนิด String StreamTokenizer token = new StreamTokenizer(





new BufferedReader(







Monday, November 5, 12

new InputStreamReader(System.in) ) );

Example of using StreamTokenizer 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.

import java.io.*; public class UsingStreamToken{

public static void main(String[] args) {



StreamTokenizer token = new StreamTokenizer (













String input = "";



while ( !input.equals("quit") ) // do until find "quit"



{





System.out.println("Please type \"quit\" to exit program");





System.out.print("Please enter your input: ");





int ttype=0;





try {





//Read data from keyboard





ttype = token.nextToken();





}





catch (IOException e) {





System.out.println("Error while reading from keyboard");





System.exit(1);





} // end try-catch









if(ttype == StreamTokenizer.TT_NUMBER) {





System.out.println("You have enter a NUMBER " +











}

Monday, November 5, 12

new BufferedReader ( new InputStreamReader( System.in) ) );



token.nval); Programming Problems: 8.1