◆ 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
* next, nextLine, nextInt, 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
* Unchecked
NumberFormatException
IllegalArgumentException
NullPointerException
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 |