시작하며
여러분 안녕하세요!
DreamHanks의 254cm입니다.
이번 시간에는 파일의 입출력에 대해서 설명해보도록 하겠습니다.
Java의 전체 기사는 여기를 클릭해 주세요.
이전 기사는 [Java 개발] 제20회 Exception 클래스 에 대해서 배워봤습니다.
파일 입출력
지금까지는 “System.out.println” 이나 “Scanner” 클래스를 이용하여 콘솔에 값을 출력 또는 입력하였습니다.
파일을 이용하여 같은 입력 및 출력을 할 수 있습니다.
파일 입출력을 다루는 클래스가 여러 가지 있는데, 이번에는 대표적인 클래스인
“Buffered Reader”와 “Buffered Writer”를 소개하겠습니다.
파일 입력
파일 입력 파일의 내용을 읽고 쓸 수 있으며, “BufferedReader”클래스가 잘 쓰지됩니다.
샘플
C 드라이브 아래에 위와 같은 파일을 두었습니다.
이 파일을 Buffered Reader 클래스를 이용하여 가져옵니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class FileIOSample { public static void main(String[] args) { try { BufferedReader br = new BufferedReader(new FileReader("C:\\in.txt")); while(true) { String line = br.readLine(); if(line == null)break; System.out.println(line); } br.close(); } catch (IOException e) { e.printStackTrace(); } } } |
출력 결과
상기 샘플은 Buffered Reader 클래스를 이용해 파일의 내용을 불러오고 있습니다.
Buffered Reader 클래스 이용 시 지정된 경로에 파일이 존재하지 않는 경우
FileNotFoundException이 발생하므로 try/catch를 이용하여 예외처리를 해야 합니다.
위 샘플에서는 FileNotFoundException이 아닌 IOException을 이용하여
예외 처리를 하였는데, FileNotFoundException은 IOException의 아이 클래스이므로 상관없습니다.
〇Buffered Reader 클래스의 주요 메서드
상기의 메소드 이외에도 여러 메소드가 있는데요.
자주 사용되는 메서드는 위와 같습니다.
샘플
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class FileIOSample { public static void main(String[] args) { try { BufferedReader br = new BufferedReader(new FileReader("C:\\in.txt")); if(br.ready()) { char character1 = (char)br.read(); System.out.println(character1); br.skip(3); char character2 = (char)br.read(); System.out.println(character2); String line = br.readLine(); System.out.println(line); } br.close(); } catch (IOException e) { e.printStackTrace(); } } } |
상기 샘플은 이전 샘플과 동일한 파일로 실시했습니다.
위의 샘플을 실행하면 첫 번째 read()메소드가 실행되고
현재 위치의 한 글자를 정수형으로 반환합니다.
정수형으로 반환되기 때문에 문자를 저장하기 위해 형 캐스트를 실시했습니다.
위의 이미지는 현재 읽기상태를 간단히 나타낸 것입니다.
화살표는 현재 읽고 있는 값의 인덱스입니다.
처음 “read()”가 실행될 때 Buffered Reader는 인덱스 값을 반환합니다.
다음은 “skip()” 메서드가 실행되고 인수로 입력된 수치만큼 문자열을 건너뛰겠습니다.
상기의 이미지와 같이 3 자리수가 건너뛰기 됩니다.
그 다음 “read()”가 실행되고, 싯이 반환됩니다.
그 다음 read Line() 메서드가 실행되고 인덱스의 현재 위치에서 한 행이 반환됩니다.
그래서 line 변수에는「시지입니다.」가 저장됩니다.
출력 결과
1 2 |
테 시지입니다. |
파일 출력
파일 출력은 파일에 내용을 쓰는 것입니다,
“BufferedWriter”클래스가 자주 사용됩니다.
샘플
1 2 3 4 5 6 7 8 9 10 11 12 |
public class FileIOSample { public static void main(String[] args) { try { BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\out.txt")); bw.write("입력입니다."); bw.close(); } catch (IOException e) { e.printStackTrace(); } } } |
상기 샘플은 Buffered Writer 클래스를 이용하여 파일에 내용을 쓰고 있습니다.
위 처리는 지정한 경로에 파일이 존재할 경우 파일 내용을 모두 지우고 내용을 덮어씁니다.
경로에 파일이 존재하지 않을 경우 지정한 파일명으로 파일을 새로 생성하여 내용을 적습니다.
파일의 내용을 지우지 않고, 계속을 쓰고 싶은 경우에는
1 2 3 4 5 6 7 8 9 10 11 12 |
public class FileIOSample { public static void main(String[] args) { try { BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\out.txt",true)); bw.write("입력입니다."); bw.close(); } catch (IOException e) { e.printStackTrace(); } } } |
위와 같이 작성하시면 됩니다.
〇Buffered Writer의 주요 메서드
위의 메소드 이외에도 여러 메소드가 있습니다만,
자주 사용되는 메소드는 위와 같습니다.
샘플
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class FileIOSample { public static void main(String[] args) { try { BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\out.txt")); bw.write("입력입니다. "); bw.write("줄을 바꾸지 않았습니다. "); bw.newLine(); bw.write("줄 바꿈했습니다. "); bw.write("이것을 사용하면 newLine 메서드를 사용하지 않고도 줄 바꿈을 할 수 있습니다. \n"); bw.write("줄 바꿈 된 것을 확인할 수 있습니다. "); bw.close(); } catch (IOException e) { e.printStackTrace(); } } } |
출력 결과
끝으로
이번 기사는 이상입니다.
다음 시간에는 래퍼 클래스를 배워보겠습니다.
방문해 주셔서 감사합니다.
コメント