Computers/Language java

week11. Input/Output and Exception Handling

emzei 2011. 4. 10. 19:59

◆ Reading Text Files

- Simplest way to read text : Use Scanner Class

- To read from a disk file, construct a FileReader . Then, use the FileReader to construct a Scanner object

FileReader reader = new FileReader(File variable);

Scanner in = new Scanner(File variable);

- Use the Scanner methods to read data from file

nextnextLinenextInt, and nextDouble





◇ Reading Words

- The next method reads a word at a time

//cf. nextLine reads one line


- A word is any sequence of characters that is not white space

To specify a pattern for word boundaries, call Delimiter(like Separator)!

Scanner.useDelimiter

ex)

   Scanner in = new Scanner (...);

   in.useDelimiter("[^A-Za-z]+");

   ...

- The notation used for describing the character pattern is called a regular expression



◇ Processing Lines

- The nextLine method reads a line of input and consumes the newline character at the end of the line

    nextLine은 한 문장을 읽고 개행문자를 먹어버리기 때문에, 데이터의 맨 마지막 문장을 읽을 때라던가 특정한 끝?!(개행문자가 더이상 없을 경우)을 읽게 될 때 의도하지 않는 값을 같이 가져오기도 한다.


- 문장을 가져올 때, 원하는 값만 가져오기위해, isDigit이라던가 isWhitespace같은 method를 사용하기 위해 사전에 체크하고 가져오는 것이 바람직하다.

  ★ 유용한 method : charAt, substring, isDigit, isCharacter ...so on


- Use trim method to remove spaces at the end of the string.

  ex. 만약 "United States 102"라는 문자열에서 숫자를 제외한 문자만 가져오기 위해 당신이 열심히 한 결과가 다음과 같다고 하자. United와 States 사이의 공백으로 인해, 공백도 고려해서 문자열에 받은 결과 States 뒤의 공백도 받았다. 이 때 맨 끝의 공백을 제거하기위해서는 trim method를 쓰면 된다.

[U|n|i|t|e|d|  |S|t|a|t|e|s|  ]  =='trim'==> [U|n|i|t|e|d|  |S|t|a|t|e|s]




 Reading Numbers

nextInt 와 nextDouble method 는 공백과 숫자를 받아들인다.


- If there is no number in the input, then a InputMismatchException occurs

ex. " 1 " -> OK 

     "1   " -> OK 

     " 1n" -> Mismatch! 앞에 숫자가 있어도 뒤에 문자로 인해 Mismatch발생

- To avoid exceptions, use the hasNextInt and hasNextDouble method to screen the input

hasNextInt와 hasNextDouble은 isDigit같은 boolean 함수로, 다음에 int형이 오는지 double형이 오는지 여부를 체크해주는 함수이다. Exceptions을 피하는 데에 유용하다.


nextInt 와 nextDouble method는 공백뒤에 오는 숫자를 받아들이지 않는다.

ex. "1 2" -> 1만 읽어들인다.


- Input 파일의 패턴을 알아둔다면 delimiter을 유용하게 쓸 수 있을 것이다.

★ ex.

[1|2|3|4|\n|e|m|z|e|i]  ==nextInt==>  [\n|e|m|z|e|i]

본래 문자열이 위와 같을 때 nextInt를 호출하고 나면 위와 같다.

이 때, nextLine을 호출하면 어떻게 될까?

[\n|e|m|z|e|i] ==nextLine==> [e|m|z|e|i] 

nextLine은 개행문자를 먹어버리게 된다... 유의하자!

"emzei"를 가져오려면 한번더 호출해야할 것이다.




◇ Reading Characters

- To read one character at a time, set the delimiter pattern to the empty string

Scanner in = new Scanner(...);

in.useDelimiter("");





 Writing Text Files

- To write to a file, construct a PrintWriter object:

PrintWriter out = new PrintWriter(File object);

- If file already exists, it is emptied before the new data are written into it

- If file does't exist, an empty file is created

- Use print and println to write into a PrintWriter :

out.print(29.95);

out.println(new Rectangle(5,10,20,30));






◆ You must CLOSE a file when you are done processing (writing / reading) it.

out.close();

   Otherwise, not all of the output may be written to the disk file (Some data might be lost) // writing에 해당





 FileNotFoundException

- When the input or output file does not exist, a FileNotFoundException can occur

- To handle the exception, label the main method like this :

public static void main(String[] arg) throws FileNotFoundException



◆ Throwing Exceptions

◇ throw - create exception object

 throws - pass the exception to other class to solve

◇ Throw an exception object to signal an exceptional condition 

ex.

IllegalArgumentException exception = new IllegalArgumentException("Amount Exceed balance!");

throw exception;

- No need to store exception object in a variable

- When an exception is thrown, method terminates immediately.


◐ Syntax : Throwing an Exception 

throw exceptionObject


ex.

if(amount>balance)

{

throw new IllegalArgumentException("Amount Exceed balance");

// A new exception object is constructed, then thrown.

// Most exception objects can be constructed with an error message

}

balance = balane - amount;

//This line is not executed when the exception is thrown.



◇ Checked and Unchecked Exceptions

* Checked

oThe compiler checks that you don’t ignore them

oDue to external circumstances that the programmer cannot prevent

oMajority occur when dealing with input and output

oFor example, IOException


* Unchecked

oExtend the class RuntimeException or Error

oThey are the programmer’s fault

oExamples of runtime exceptions:

  NumberFormatException

  IllegalArgumentException

  NullPointerException

oExample of error:

  OutOfMemoryError



◐ Syntax : throws Clause

accessSpecifier returnType methodName(...)

throws ExceptionClass, ExceptionClass...

ex.

public void read(String filename)

throws FileNotFoundException, NoSuchElementException

// You must specify all checked exceptions that this method may throw

// You may also list unchecked exceptions



◆ Catching Exceptions

- try > catch > finally

- try 블록 내의 statement가 실행되고 exception이 있으면 catch로 넘어가서 object를 분석한다. 그 후 finally 실행

- exception이 존재하지 않는다면 catch는 skip되고 finally 실행

- 즉, finally는 항상 작동한다


◇ The finally Clause

- Must execute reader.close() even if exception happens

- Use finally clause for code that must be executed "no matter what"




'Computers > Language java' 카테고리의 다른 글

Access specifier / Modifier  (0) 2011.04.10
Interface / polymorphism / Event Handling / Inheritance / GUI  (0) 2011.04.10
week10. Inheritance  (0) 2011.04.10
week9. Interfaces and Polymorphism  (0) 2011.04.10
week8. Graphic User Interface  (0) 2011.04.10