Presentation is loading. Please wait.

Presentation is loading. Please wait.

파일 입출력에 사용되는 자바 클래스들 JDK 라이브러리의 파일을 다루는 클래스들 파일의 내용을 읽고 쓰는 클래스들

Similar presentations


Presentation on theme: "파일 입출력에 사용되는 자바 클래스들 JDK 라이브러리의 파일을 다루는 클래스들 파일의 내용을 읽고 쓰는 클래스들"— Presentation transcript:

1 파일 입출력에 사용되는 자바 클래스들 JDK 라이브러리의 파일을 다루는 클래스들 파일의 내용을 읽고 쓰는 클래스들
입출력 기능/성능을 향상시키는 클래스들 데이터를 포맷해서 출력하는 클래스들 파일 관리에 사용되는 클래스

2 01. 파일을 다루는 자바 클래스들 파일 입출력에 사용되는 자바 클래스들 스트림이란? • 일차원적인 데이터의 흐름
• 흐름의 방향에 따른 분류 - 입력 스트림(input stream) - 출력 스트림(output stream) • 데이터의 형태에 따른 분류 - 문자 스트림(character stream) - 바이트 스트림(byte stream)

3 01. 파일을 다루는 자바 클래스들 파일 입출력에 사용되는 자바 클래스들 스트림을 다루는 클래스들
• 파일 입출력 스트림을 다루는 클래스들 java.io 선택 java.io 패키지에 대한 개략적인 설명이 있는 홈페이지 파일 입출력 클래스들

4 파일 입출력에 사용되는 자바 클래스들 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력의 과정 • 3단계로 이루어짐

5 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileReader 클래스
• 사용 방법 1) 1단계: 파일을 엽니다

6 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileReader 클래스 • 사용 방법
2) 2단계: 파일을 읽습니다

7 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileReader 클래스 • 사용 방법
3) 3단계: 파일을 닫습니다

8 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileReader 클래스
[예제 10-1] 텍스트 파일을 읽는 프로그램 – 미완성 (1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import java.io.*; class ReaderExample1 { public static void main(String args[]) { FileReader reader = new FileReader("poem.txt"); while (true) { int data = reader.read(); if (data == -1) break; char ch = (char) data; System.out.print(ch); } reader.close(); 파일을 여는 부분 파일을 읽어서 처리하는 부분 파일을 닫는 부분

9 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileReader 클래스
[예제 10-2] 텍스트 파일을 읽는 프로그램 – 미완성 (2) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import java.io.*; class ReaderExample1 { public static void main(String args[]) { try { FileReader reader = new FileReader("poem.txt"); while (true) { int data = reader.read(); if (data == -1) break; char ch = (char) data; System.out.print(ch); } reader.close(); catch (FileNotFoundException fnfe) { System.out.println("파일이 존재하지 않습니다."); catch (IOException ioe) { System.out.println("파일을 읽을 수 없습니다."); 익셉션이 발생하는 부분을 try 문으로 묶었습니다. FileReader의 생성자가 발생하는 익셉션을 처리 FileReader의 read, close 메소드가 발생하는 익셉션을 처리

10 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileReader 클래스
[예제 10-3] 텍스트 파일을 읽는 프로그램 – 완성 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 26 27 28 29 import java.io.*; class ReaderExample1 { public static void main(String args[]) { FileReader reader = null; try { reader = new FileReader("poem.txt"); while (true) { int data = reader.read(); if (data == -1) break; char ch = (char) data; System.out.print(ch); } catch (FileNotFoundException fnfe) { System.out.println("파일이 존재하지 않습니다."); catch (IOException ioe) { System.out.println("파일을 읽을 수 없습니다."); finally { reader.close(); catch (Exception e) { 프로그램을 실행하기 전에 실행 디렉토리에 poem.txt라는 파일을 만들어 놓으십시오. 그리고 나서 프로그램을 실행하면 poem.txt 파일의 내용이 출력됩니다. 파일을 닫는 명령문을 finally 블록으로 이동 close 메소드가 발생하는 익셉션을 처리

11 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileReader 클래스
파일로부터 읽은 문자를 담을 char 배열

12 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileWriter 클래스
• 사용 방법 1) 1단계: 파일을 엽니다

13 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileWriter 클래스 • 사용 방법
2) 2단계: 파일에 문자를 씁니다 3) 3단계: 파일을 닫습니다

14 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileWriter 클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import java.io.*; class WriterExample1 { public static void main(String args[]) { FileWriter writer = null; try { writer = new FileWriter("output.txt"); char arr[] = { '뇌', '를', ' ', '자', '극', '하', '는', ' ', 'J', 'a', 'v', 'a' }; for (int cnt = 0; cnt < arr.length; cnt++) writer.write(arr[cnt]); } catch (IOException ioe) { System.out.println("파일로 출력할 수 없습니다."); finally { writer.close(); catch (Exception e) { 파일을 엽니다. 파일에 반복해서 문자들을 씁니다. 프로그램을 실행하면 output.txt라는 파일이 생성됩니다. 파일을 닫습니다. 그 파일을 텍스트 에디터로 열어보면 프로그램에서 출력한 내용이 들어있는 것을 확인할 수 있습니다.

15 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileWriter 클래스
writer.write(arr); arr 배열에 있는 모든 문자들을 파일로 출력 char 배열

16 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileOutputStream 클래스
• 사용 방법 1) 1단계: 파일을 엽니다 * 방법은 FileWriter 클래스와 동일 2) 2단계: 파일에 데이터를 씁니다 3) 3단계: 파일을 닫습니다 71의 비트 패턴인 을 갖는 하나의 바이트를 파일로 출력

17 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileOutputStream 클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import java.io.*; class OutputStreamExample1 { public static void main(String args[]) { FileOutputStream out = null; try { out = new FileOutputStream("output.dat"); byte arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }; for (int cnt = 0; cnt < arr.length; cnt++) out.write(arr[cnt]); } catch (IOException ioe) { System.out.println("파일로 출력할 수 없습니다."); finally { out.close(); catch (Exception e) { 파일을 엽니다. 파일에 반복해서 byte 타입 데이터를 씁니다. 프로그램을 실행하면 output.dat라는 파일이 생깁니다. 파일을 닫습니다.

18 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileInputStream 클래스
• 사용 방법 1) 1단계: 파일을 엽니다 * 방법은 FileReader 클래스와 동일 2) 2단계: 파일로부터 데이터를 읽습니다 3) 3단계: 파일을 닫습니다

19 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileInputStream 클래스
• 한꺼번에 여러 바이트를 읽는 read 메소드

20 02. 파일의 내용을 읽고 쓰는 클래스들 파일 입출력에 사용되는 자바 클래스들 FileInputStream 클래스
[예제 10-6] 파일의 내용을 읽어서 16진수로 출력하는 프로그램 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 26 27 28 29 30 31 32 33 34 35 import java.io.*; class FileDump { public static void main(String args[]) { if (args.length < 1) { System.out.println("Usage: java FileDump <filename>"); return; } FileInputStream in = null; try { in = new FileInputStream(args[0]); byte arr[] = new byte[16]; while (true) { int num = in.read(arr); if (num < 0) break; for (int cnt = 0; cnt < num; cnt ++) System.out.printf("%02X ", arr[cnt]); System.out.println(); catch (FileNotFoundException fnfe) { System.out.println(args[0] + " 파일이 존재하지 않습니다."); catch (IOException ioe) { System.out.println(args[0] + " 파일을 읽을 수 없습니다."); finally { in.close(); catch (Exception e) { 파일을 엽니다. 파일로부터 16바이트씩 읽습니다. 읽어들인 바이트 데이터를 16진수로 출력합니다. 파일을 닫습니다.

21 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 입출력 기능/성능을 향상시키는 클래스들
- 이 클래스들은 모두 java.io 패키지에 속함 - 이 클래스들은 단독으로는 사용될 수 없음 클래스 이름 설명 DataInputStream 프리미티브 타입의 데이터를 입출력하는 클래스 DataOutputStream ObjectInputStream 프리미티브 타입과 레퍼런스 타입의 데이터를 입출력하는 클래스 ObjectOutputStream BufferedReader 데이터를 한꺼번에 읽어서 버퍼에 저장해두는 클래스 BufferedInputStream BufferedWriter 데이터를 버퍼에 저장해두었다가 한꺼번에 출력하는 클래스 BufferedOutputStream LineNumberReader 텍스트 파일의 각 행에 번호를 붙여가면서 읽는 클래스

22 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 DataOutputStream 클래스
• 사용 방법 1) 다음과 같은 방법으로 객체를 생성합니다.

23 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 DataOutputStream 클래스
• 사용 방법 2) 프리미티브 타입 데이터를 출력하는 메소드를 호출합니다. 메소드 설명 void writeByte(int value) value의 마지막 1바이트 출력 void writeShort(int value) value의 마지막 2바이트 출력 void writeChar(int value) void writeInt(int value) value 출력 void writeLong(long value) void writeFloat(float value) void writeDouble(double value) void writeBoolean(boolean value) [예]

24 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 DataOutputStream 클래스
• 사용 방법 3) 파일을 닫습니다.

25 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 DataOutputStream 클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import java.io.*; class DataOutputExample1 { public static void main(String args[]) { DataOutputStream out = null; try { out = new DataOutputStream(new FileOutputStream("output.dat")); int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; for (int cnt = 0; cnt < arr.length; cnt++) out.writeInt(arr[cnt]); } catch (IOException ioe) { System.out.println("파일로 출력할 수 없습니다."); finally { out.close(); catch (Exception e) { 파일을 엽니다. 파일에 int 타입 데이터를 씁니다. 프로그램을 실행하면 output.dat라는 파일이 생깁니다. 파일을 닫습니다.

26 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 DataInputStream 클래스
• 사용 방법 1) 다음과 같은 방법으로 객체를 생성합니다.

27 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 DataInputStream 클래스 • 사용 방법
2) 프리미티브 타입의 데이터를 읽는 메소드를 호출합니다. 메소드 설명 byte readByte() 1바이트를 읽어서 byte 타입으로 리턴 short readShort() 2바이트를 읽어서 short 타입으로 리턴 char readChar() 2바이트를 읽어서 char 타입으로 리턴 int readInt() 4바이트를 읽어서 int 타입으로 리턴 long readLong() 8바이트를 읽어서 long 타입으로 리턴 float readFloat() 4바이트를 읽어서 float 타입으로 리턴 double readDouble() 8바이트를 읽어서 double 타입으로 리턴 boolean readBoolean() 1바이트를 읽어서 boolean 타입으로 리턴 (0이면 false, 아니면 true) [예]

28 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 DataInputStream 클래스 • 사용 방법
3) 파일을 닫습니다. * close 메소드 호출 방법은 다른 클래스와 동일

29 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 DataInputStream 클래스
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 26 27 28 29 import java.io.*; class DataInputExample1 { public static void main(String args[]) { DataInputStream in = null; try { in = new DataInputStream(new FileInputStream("output.dat")); while (true) { int data = in.readInt(); System.out.println(data); } catch (FileNotFoundException fnfe) { System.out.println("파일이 존재하지 않습니다."); catch (EOFException eofe) { System.out.println("끝"); catch (IOException ioe) { System.out.println("파일을 읽을 수 없습니다."); finally { in.close(); catch (Exception e) { 파일을 엽니다. 파일로부터 정수를 읽어서 출력합니다. 파일을 닫습니다.

30 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 문자열을 읽고 쓰는 메소드
• DataOutputStream 클래스의 문자열을 쓰는 메소드 • DataInputStream 클래스의 문자열을 읽는 메소드

31 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 ObjectOutputStream 클래스
• 사용 방법 1) 다음과 같은 방법으로 ObjectOutputStream 객체를 생성합니다.

32 직렬화(serialization)라고 합니다.
파일 입출력에 사용되는 자바 클래스들 03. 입출력 기능/성능 향상 클래스들 ObjectOutputStream 클래스 • 사용 방법 2) 객체를 출력하는 writeObject 메소드를 호출합니다. 3) 파일을 닫습니다. * close 메소드 호출 방법은 다른 클래스와 동일 이렇게 객체를 스트림으로 만드는 것을 직렬화(serialization)라고 합니다.

33 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 ObjectOutputStream 클래스
• 직렬화 가능 클래스와 직렬화 불가능 클래스 java.io.Serializable를 구현하므로 직렬화 가능 클래스 java.io.Serializable를 구현하지 않으므로 직렬화 불가능 클래스

34 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 ObjectOutputStream 클래스
[예제 10-9] 객체를 파일에 저장하는 프로그램 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import java.io.*; import java.util.GregorianCalendar; class ObjectOutputExample1 { public static void main(String args[]) { ObjectOutputStream out = null; try { out = new ObjectOutputStream(new FileOutputStream("output.dat")); out.writeObject(new GregorianCalendar(2006, 0, 14)); out.writeObject(new GregorianCalendar(2006, 0, 15)); out.writeObject(new GregorianCalendar(2006, 0, 16)); } catch (IOException ioe) { System.out.println("파일로 출력할 수 없습니다."); finally { out.close(); catch (Exception e) { 파일을 엽니다. 프로그램을 실행하면 output.dat라는 파일이 생깁니다. GregorianCalendar 객체를 생성해서 파일에 씁니다. 파일을 닫습니다.

35 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 ObjectInputStream 클래스
• 사용 방법 1) 다음과 같은 방법으로 ObjectInputStream 객체를 생성합니다.

36 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 ObjectInputStream 클래스
• 사용 방법 2) 객체를 읽는 readObject 메소드를 호출합니다. 3) 파일을 닫습니다. * close 메소드 호출 방법은 다른 클래스와 동일

37 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 ObjectInputStream 클래스
[예제 10-10] 객체를 파일로부터 읽는 프로그램 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 26 27 28 29 30 31 32 33 34 35 36 37 import java.io.*; import java.util.GregorianCalendar; import java.util.Calendar; class ObjectInputExample1 { public static void main(String args[]) { ObjectInputStream in = null; try { in = new ObjectInputStream(new FileInputStream("output.dat")); while (true) { GregorianCalendar calendar = (GregorianCalendar) in.readObject(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int date = calendar.get(Calendar.DATE); System.out.println(year + "/" + month + "/" + date); } catch (FileNotFoundException fnfe) { System.out.println("파일이 존재하지 않습니다."); catch (EOFException eofe) { System.out.println("끝"); catch (IOException ioe) { System.out.println("파일을 읽을 수 없습니다."); catch (ClassNotFoundException cnfe) { System.out.println("해당 클래스가 존재하지 않습니다."); finally { in.close(); catch (Exception e) { 파일을 엽니다. 파일로부터 GregorianCalendar 객체를 읽어서 YYYY/MM/DD 포맷으로 출력합니다. 파일로부터 더 이상 읽을 객체가 없을 때 발생하는 익셉션을 처리합니다. 파일을 닫습니다.

38 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 버퍼를 이용해서 입출력 성능을 향상시키는 클래스들
• 스트림의 종류에 따라 4개의 클래스가 있음 클래스 이름 설명 BufferedInputStream 바이트 입력 스트림을 버퍼링하는 클래스 BufferedOutputStream 바이트 출력 스트림을 버퍼링하는 클래스 BufferedReader 문자 입력 스트림을 버퍼링하는 클래스 BufferedWriter 문자 출력 스트림을 버퍼링하는 클래스

39 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 BufferedInputStream 클래스
• 사용 방법 1) 다음과 같은 방법으로 객체를 생성합니다. 2) read 메소드를 호출하여 데이터를 읽습니다. * FileInputStream 클래스의 read 메소드 호출 방법과 동일 3) 파일을 닫습니다. * FileInputStream 클래스의 close 메소드 호출 방법과 동일

40 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 BufferedInputStream 클래스
[예제 10-11] BufferedInputStream로 성능을 향상시킨 FileDump 프로그램 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 26 27 28 29 30 31 32 33 34 35 import java.io.*; class FileDump { public static void main(String args[]) { if (args.length < 1) { System.out.println("Usage: java FileDump <filename>"); return; } BufferedInputStream in = null; try { in = new BufferedInputStream(new FileInputStream(args[0])); byte arr[] = new byte[16]; while (true) { int num = in.read(arr); if (num < 0) break; for (int cnt = 0; cnt < num; cnt ++) System.out.printf("%02X ", arr[cnt]); System.out.println(); catch (FileNotFoundException fnfe) { System.out.println(args[0] + " 파일이 존재하지 않습니다."); catch (IOException ioe) { System.out.println(args[0] + " 파일을 읽을 수 없습니다."); finally { in.close(); catch (Exception e) { 이 두 부분을 제외한 나머지 부분은 [예제 10-6]과 동일합니다.

41 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 BufferedInputStream 클래스
• 버퍼의 크기를 지정하는 방법

42 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 BufferedWriter 클래스
• 사용 방법 1) 다음과 같은 방법으로 객체를 생성합니다. 2) write 메소드를 호출하여 데이터를 출력합니다. * FileWriter 클래스의 write 메소드 호출 방법과 동일 3) 파일을 닫습니다. * FileWriter 클래스의 close 메소드 호출 방법과 동일

43 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 BufferedWriter 클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import java.io.*; class WriterExample1 { public static void main(String args[]) { BufferedWriter writer = null; try { writer = new BufferedWriter(new FileWriter("output.txt")); char arr[] = { '뇌', '를', ' ', '자', '극', '하', '는', ' ', 'J', 'a', 'v', 'a' }; for (int cnt = 0; cnt < arr.length; cnt++) writer.write(arr[cnt]); } catch (IOException ioe) { System.out.println("파일로 출력할 수 없습니다."); finally { writer.close(); catch (Exception e) { 이 두 부분을 제외한 나머지 부분은 [예제 10-4]와 동일합니다. 프로그램을 실행하면 output.txt라는 파일이 생깁니다. 그 파일을 텍스트 에디터로 열어보면 프로그램에서 출력한 내용이 들어있는 것을 확인할 수 있습니다.

44 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 BufferedWriter 클래스
• 버퍼에 있는 데이터를 파일에 즉시 출력하는 flush메소드

45 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 LineNumberReader 클래스
• 사용 방법 1) 다음과 같은 방법으로 객체를 생성합니다.

46 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 LineNumberReader 클래스
• 사용 방법 2) readLine 메소드를 호출해서 텍스트를 읽습니다. 3) 읽어들인 행의 번호는 getLineNumber 메소드를 호출해서 가져옵니다.

47 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 LineNumberReader 클래스
[예제 10-13] 텍스트 파일에 행 번호를 붙이면서 읽는 프로그램 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 26 27 28 29 import java.io.*; class LineNumberExample1 { public static void main(String args[]) { LineNumberReader reader = null; try { reader = new LineNumberReader(new FileReader("poem.txt")); while (true) { String str = reader.readLine(); if (str == null) break; int lineNo = reader.getLineNumber(); System.out.println(lineNo + ": " + str); } catch (FileNotFoundException fnfe) { System.out.println("파일이 존재하지 않습니다."); catch (IOException ioe) { System.out.println("파일을 읽을 수 없습니다."); finally { reader.close(); catch (Exception e) { 파일을 엽니다. 프로그램을 실행하기 전에 실행 디렉토리에 poem.txt라는 파일을 만들어 놓으십시오. 그리고 나서 프로그램을 실행하면 poem.txt 파일의 내용이 행번호와 함께 출력됩니다. 파일로부터 한 행씩 읽어서 행 번호와 함께 출력합니다. 파일을 닫습니다.

48 04. 데이터를 포맷해서 출력하는 클래스들 파일 입출력에 사용되는 자바 클래스들
PrintWriter 클래스와 PrintStream 클래스 [PrintWriter 클래스의 API 규격서] [PrintStream 클래스의 API 규격서] 메소드의 기능과 사용 방법이 거의 동일합니다.

49 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 PrintWriter 클래스
• 사용 방법 1) 다음과 같은 방법으로 PrintWriter 객체를 생성해서 파일을 엽니다.

50 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 PrintWriter 클래스 • 사용 방법
2) print, println, printf 메소드를 호출합니다. 포맷 명세자(format specifier) 포맷 문자열(format string)

51 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 PrintWriter 클래스
• 아규먼트 인덱스(argument index) 아규먼트 인덱스(argument index)

52 04. 데이터를 포맷해서 출력하는 클래스들 파일 입출력에 사용되는 자바 클래스들 PrintWriter 클래스
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.*; import java.util.*; class PrintWriterExample1 { public static void main(String args[]) { PrintWriter writer = null; try { writer = new PrintWriter("output.txt"); writer.println(" *** 성적표 *** "); writer.printf("%3s : %3d %3d %3d %5.1f %n", "김지영", 92, 87, 95, 91.3f); writer.printf("%3s : %3d %3d %3d %5.1f %n", "박현식", 100, 90, 88, 92.7f); writer.printf("%3s : %3d %3d %3d %5.1f %n", "최민재", 75, 88, 85, 82.7f); writer.printf("작성일자 : %1$tY년 %1$tm월 %1$td일", new GregorianCalendar()); } catch (IOException ioe) { System.out.print("파일로 출력할 수 없습니다."); finally { writer.close(); catch (Exception e) { 파일을 엽니다. 데이터를 포맷해서 출력합니다. 프로그램을 실행하면 output.txt라는 파일이 생깁니다. 그 파일을 열어보면 프로그램에서 출력한 내용이 있습니다. 파일을 닫습니다.

53 03. 입출력 기능/성능 향상 클래스들 파일 입출력에 사용되는 자바 클래스들 PrintStream 클래스
사용 방법은 PrintWriter 클래스와 동일 JDK 구버전부터 있던 클래스 - System.out.println, System.out.print, System.out.printf 메소드가 속하는 클래스 PrintStream 타입으로 선언되어 있는 System 클래스의 out 필드

54 04. 데이터를 포맷해서 출력하는 클래스들 파일 입출력에 사용되는 자바 클래스들 PrintStream 클래스
1 2 3 4 5 6 7 8 9 10 import java.util.*; class PrintStreamExample1 { public static void main(String args[]) { System.out.println(" *** 성적표 *** "); System.out.printf("%3s : %3d %3d %3d %5.1f %n", "김지영", 92, 87, 95, 91.3f); System.out.printf("%3s : %3d %3d %3d %5.1f %n", "박현식", 100, 90, 88, 92.7f); System.out.printf("%3s : %3d %3d %3d %5.1f %n", "최민재", 75, 88, 85, 82.7f); System.out.printf("작성일자 : %1$tY년 %1$tm월 %1$td일", new GregorianCalendar()); }

55 05. 파일 관리에 사용되는 File 클래스 파일 입출력에 사용되는 자바 클래스들 File 클래스
• 다음과 같은 메소드 제공 파일 정보를 가져오는 메소드 파일 정보를 수정하는 메소드 파일을 생성/삭제하는 메소드 • 디렉토리 관리에도 사용됨 특수한 형태의 파일이라고 할 수 있음

56 05. 파일 관리에 사용되는 File 클래스 파일 입출력에 사용되는 자바 클래스들 파일/디렉토리 정보 가져오기 • 사용 방법
파일/디렉토리 정보 가져오기 • 사용 방법 1) 다음과 같은 방법으로 File 객체를 생성합니다.

57 05. 파일 관리에 사용되는 File 클래스 파일 입출력에 사용되는 자바 클래스들 파일/디렉토리 정보 가져오기 • 사용 방법
파일/디렉토리 정보 가져오기 • 사용 방법 2) 파일/디렉토리 정보를 가져오는 메소드를 호출합니다.

58 05. 파일 관리에 사용되는 File 클래스 파일 입출력에 사용되는 자바 클래스들 파일/디렉토리 정보 가져오기 • 사용 방법
파일/디렉토리 정보 가져오기 • 사용 방법 2) 파일/디렉토리 정보를 가져오는 메소드를 호출합니다. (계속)

59 05. 파일 관리에 사용되는 File 클래스 파일 입출력에 사용되는 자바 클래스들 파일/디렉토리 정보 가져오기
파일/디렉토리 정보 가져오기 [예제 10-16] 현재 디렉토리의 서브디렉토리와 파일 목록을 출력하는 프로그램 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import java.io.*; import java.util.*; class FileExample1 { public static void main(String args[]) { File file = new File("."); File arr[] = file.listFiles(); for (int cnt = 0; cnt < arr.length; cnt++) { String name = arr[cnt].getName(); if (arr[cnt].isFile()) System.out.printf("%-25s %7d ", name, arr[cnt].length()); else System.out.printf("%-25s <DIR> ", name); long time = arr[cnt].lastModified(); GregorianCalendar calendar = new GregorianCalendar(); calendar.setTimeInMillis(time); System.out.printf("%1$tF %1$tT %n", calendar); } 현재 디렉토리 경로명을 가지고 File 객체를 생성합니다. 서브디렉토리와 파일 목록을 가져옵니다. 테스트를 위해 디렉토리 생성 가져온 서브디렉토리와 파일의 이름, 크기, 최종수정 일시를 출력합니다.

60 05. 파일 관리에 사용되는 File 클래스 파일 입출력에 사용되는 자바 클래스들 파일/디렉토리 생성/삭제하기
• 파일을 생성하고 삭제하는 메소드 • 디렉토리를 생성하고 삭제하는 메소드

61 05. 파일 관리에 사용되는 File 클래스 파일 입출력에 사용되는 자바 클래스들 임시 파일 생성하기
• 임시 파일을 생성하는 메소드

62 05. 파일 관리에 사용되는 File 클래스 파일 입출력에 사용되는 자바 클래스들 임시 파일 생성하기
• 생성된 임시 파일의 사용 방법 FileWriter 클래스에는 File 타입의 파라미터를 받는 생성자가 있습니다. FileWriter writer = new FileWriter(tmpFile); 그 생성자를 이용하여 파일을 열 수 있습니다.

63 05. 파일 관리에 사용되는 File 클래스 파일 입출력에 사용되는 자바 클래스들 임시 파일 생성하기
[예제 10-17] 임시 파일을 생성해서 사용하는 프로그램 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import java.io.*; class FileExample2 { public static void main(String args[]) { FileWriter writer = null; try { File file = File.createTempFile("tmp", ".txt", new File("C:\\temp")); writer = new FileWriter(file); writer.write('자'); writer.write('바'); } catch (IOException ioe) { System.out.println("임시 파일에 쓸 수 없습니다."); finally { writer.close(); catch (Exception e) { 임시 파일을 생성합니다. 임시 파일을 열어서 데이터를 씁니다. 프로그램을 실행하고 나서 임시 파일 디렉토리를 확인해보면 임시 파일이 생성된 것을 확인할 수 있습니다. 그리고 그 임시 파일 안에는 프로그램에서 출력한 내용이 들어있습니다. 임시 파일을 닫습니다.


Download ppt "파일 입출력에 사용되는 자바 클래스들 JDK 라이브러리의 파일을 다루는 클래스들 파일의 내용을 읽고 쓰는 클래스들"

Similar presentations


Ads by Google