51
Java Java 파파 파파파 파파 파파파

Java 파일 입출력

  • Upload
    fran

  • View
    79

  • Download
    0

Embed Size (px)

DESCRIPTION

Java 파일 입출력. Chap 10. Java 파일 입출력. 자바의 입출력은 모든 하드웨어에 독립적으로 설계 자바는 입출력을 스트림 (Stream) 으로 처리 사용자는 스트림을 이용하여 입출력 수행 스트림을 이용하여 실제 다양한 하드웨어와 입출력을 수행하는 일은 JVM 에 의해 실행 자바는 입출력을 위한 클래스로 java.io 패키지제공. Chap 10. Java 파일 입출력. 스트림 (stream) 의 개요 스트림 : 순서가 있는 일련의 데이터를 의미하는 추상적인 의미 입출력 데이터의 흐름 - PowerPoint PPT Presentation

Citation preview

Page 1: Java  파일 입출력

Java Java 파일 입출력파일 입출력

Page 2: Java  파일 입출력

자바의 입출력은 모든 하드웨어에 독립적으로 설계

자바는 입출력을 스트림 (Stream) 으로 처리

사용자는 스트림을 이용하여 입출력 수행

스트림을 이용하여 실제 다양한 하드웨어와

입출력을 수행하는 일은 JVM 에 의해 실행

자바는 입출력을 위한 클래스로 java.io 패키지제공

Chap 10. Java Chap 10. Java 파일 입출력파일 입출력

Page 3: Java  파일 입출력

스트림 (stream) 의 개요 스트림 : 순서가 있는 일련의 데이터를

의미하는 추상적인 의미 입출력 데이터의 흐름 데이터의 형식이나 길이가 정해지지 않음 . 문자형 (16 비트 ) 또는 바이트형 (8 비트 )

데이터의 일렬 이동 네트워크 소켓 프로그램에도 적용됨

Chap 10. Java Chap 10. Java 파일 입출력파일 입출력

Page 4: Java  파일 입출력

10. 10. 파일 입출력파일 입출력

java.io 패키지 스트림 (stream)

바이트 스트림 - 바이트의 연속 (ex, 이미지 파일 등 )InputStream - 입력OutputStream - 출력

문자 스트림 - 문자의 연속 (ex, text)Reader - 입력Writer - 출력

System 클래스out - PrintStreamin - InputStream

Page 5: Java  파일 입출력

10. 10. 파일 입출력파일 입출력

출력 스트림 클래스 상속 관계

입력 스트림 클래스 상속 관계

바이트 스트림 상속 관계

Page 6: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 문자 스트림 상속 관계

Reader 클래스 상속 관계

Writer 클래스 상속 관계

Page 7: Java  파일 입출력

10. 10. 파일 입출력파일 입출력

10.1 File 클래스 파일과 디렉토리 관련 메소드를 지원 생성자

public File(String path);

public File(String path, String fileName);

public File(File directory, String fileName);

파일의 객체생성

File f1 = new File("C:\Java\Stream\Test.java"); File f2 = new File("C:\Java\Stream", "Test.java"); File dir = new File("C:\Java\Stream"); // 디렉토리 생성 File f3 = new File(dir, "Test.java"); // 생성된 디렉토리 이용

Page 8: Java  파일 입출력

10. 10. 파일 입출력파일 입출력

10.2 File 클래스 메소드

String getName() 파일의 이름을 반환

long length() 파일의 길이를 반환

String getPath() 파일의 경로를 반환

String getAbsolutePath() 파일의 절대 경로를 반환

String getParent() 파일의 부모 디렉토리를 반환

boolean canWrite() 파일이 쓰기 가능이면 true 를 반환

boolean canRead() 파일이 읽기 가능이면 true 를 반환

boolean isFile() 현 객체가 파일이면 true 를 반환

boolean isDirectory() 현 객체가 디렉토리이면 true 를 반환

boolean equals(Object obj) 현 객체와 obj 가 동일하면 ture 를 반환

Page 9: Java  파일 입출력

10. 10. 파일 입출력파일 입출력

10.2.1 File 클래스 메소드

long lastModified() 파일의 마지막 수정 시간을 밀리초단위로 반환

( 기준시간 : 1970 년 1 월 1 일을 0 으로 시작 )

boolean delete() 파일을 삭제하고 true 를 반환 , 불가능시 false 반환

boolean mkdir()

현 객체 패스 이름의 디렉토리를 생성하고 true 를 반환 ,

불가능시 false 반환

String[] list() 디렉토리에서 파일이름의 배열을 반환

boolean renameTo(File new)

파일이나 디렉토리이름을 new 로 변경한 다음 ture 를 반환 ,

불가능시 false 를 반환

Page 10: Java  파일 입출력

10. 10. 파일 입출력파일 입출력

10.2.2 Sample

import java.io.File;

class FileDemo1 {

public static void main(String args[]) {

String dir = "c:/httpd";

File f1 = new File(dir);

System.out.println("Directory Name: " + dir);

System.out.println("last Modified : "+f1.lastModified());

System.out.println("Can Read ? : " + f1.canRead());

System.out.println("Can Write ? : " + f1.canWrite());

System.out.println("is File ? : " + f1.isFile());

System.out.println("is Directory? : " + f1.isDirectory());

Page 11: Java  파일 입출력

10. 10. 파일 입출력파일 입출력10.2.3 Sample

System.out.println("---Now we check c:/httpd's sub directory---"); String s[] = f1.list(); for (int i=0; i < s.length; i++) { File f = new File(dir, s[i]); if (f.isDirectory()) { System.out.println(s[i] + " is a Directory"); } else { System.out.print(s[i] + " is a File "); System.out.println("& size is "+f.length()); } } } }

Page 12: Java  파일 입출력

10. 10. 파일 입출력파일 입출력

Page 13: Java  파일 입출력

10. 10. 파일 입출력파일 입출력10.2.4 결과 C:\JAVA\NewBook\c10>java FileDemo1 Directory Name: c:/httpd last Modified : 924777402000 Can Read ? : true Can Write ? : true is File ? : false is Directory? : true --- Now we check c:/httpd's sub directory --- Icons is a Directory Logs is a Directory HtDocs is a Directory cgi-bin is a Directory Cgi-Win is a Directory Uninst.isu is a File & size is 12580 License.txt is a File & size is 1738 OHTTPd.exe is a File & size is 327680

Page 14: Java  파일 입출력

10. 10. 파일 입출력파일 입출력10.3 바이트 스트림 - 8 비트 데이터 입출력을 위한 스트림 10.3.1 OutputStream 클래스와 InputStream 클래스 - OutputStream 클래스의 메소드

메 소 드 설 명void close() throws IOException 출력 스트림을 닫는다 .void flush() throws IOException 버퍼에 저장된 데이터 모두 출력void write(int i) throws IOException 정수 i 의 하위 8bit 를 출력한다 .void write(byte buf[]) throws IOException buf[] 의 내용을 출력한다 .void write(byte buf[], int index, int size) throws IOException buf[] 의 index 에서 size 만큼의 바이트 출력한다 .

Page 15: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 - InputStream 클래스의 메소드

메 소 드 설 명void close() throws IOException 입력 스트림을 닫는다 .int read() throws IOException 입력 스트림 한 바이트를 읽는다 .int read(byte buf[]) throws IOException 입력 스트림에서 buf[] 를 읽고 , 읽은 바이트 수를 반환한다 .int read(byte buf[], int offset, int size) throws IOException 입력 스트림에서 size 만큼 읽고 , 읽은 바이트 수를

반환한다 .int avaiable() 읽기 가능한 바이트 수를 반환int skip(long num) num 만큼의 바이트를 지나친다 .void mark(int numByte) 입력 스트림의 현재 위치에 markvoid reset() 입력 스트림의 포인트를 mark 위치로 복귀한다 .

Page 16: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 10.3.2 FileOutputStream 클래스와 FileInputStream 클래스 - 이진데이터를 파일에 쓰거나 읽을 수 있도록 한다 .

o FileOutputStream 클래스 생성자 FileOutputStream(String filepath) throws IOException FileOutputStream(String filepath, boolean append) throws IOExcept

ion FileOutputStream(File fileObj) throws IOException

o FileInputStream 클래스 생성자 FileInputStream(String filepath) throws FileNotFoundException FileInputStream(File fileObje) throws FileNotFoundException

Page 17: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 예제 코드 ]

import java.io.*; class FileOutputStreamDemo { public static void main(String args[]) throws IOException { FileOutputStream f = new FileOutputStream(args[0]); for(int i = 0; i < 5 ; i++) f.write(i); for(char c='A'; c <='Z'; c++) f.write(c); // 문자 c 를 저장 f.close(); } }

Page 18: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 실행 결과 ] C:\java\c10>java FileOutputStreamDemo fs.dat C:\java\c10>type fs.dat ?!$%~ABCDEFGHIJKLMNOPQRSTUV

Page 19: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 예제 코드 ] import java.io.*; class FileInputStreamDemo { public static void main(String args[]) throws IOException { FileInputStream f = new FileInputStream(args[0]); int i; for(i=0; i<5; i++) System.out.print(f.read()+" "); System.out.println(); while((i = f.read()) != -1) { // EOF test System.out.print((char)i+" "); } f.close(); } }

Page 20: Java  파일 입출력

10. 10. 파일 입출력파일 입출력

[ 실행 결과 ]

C:\java\c10>java FileInputStreamDemo fs.dat 0 1 2 3 4 A B C D E F G H I J K L M N O P Q R S T U

V W X Y Z

Page 21: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 10.3.3 DataOutputStream 클래스 o 생성자 DataOutputStream(OutputStream outStream) o DataOutputStream 클래스의 메소드 void writeByte(int i) throws IOException i 의 하위 8 비트를 출력 void writeChar(int i) throws IOException i 의 하위 16 비트를 출력 void writeChars(String s) throws IOException 문자열 s 를 출력 void writeDouble(double d) throws IOException 실수 d 를 스트림으로 출력 void writeInt(int i) throws IOException 정수 i 를 스트림으로 출력 void writeLong(long l) throws IOException 정수 l 을 스트림으로 출력 void writeBoolean(boolean b) throws IOException boolean 형 b 를 스트림으로 출력 void writeUTF(String s) throws IOException String s 를 UTF-8 로 인코딩하여 스트림으로 출력

Page 22: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 예제 코드 ]

import java.io.*; class DataOutputStreamDemo { public static void main(String args[]) { try { FileOutputStream f = new FileOutputStream(args[0]); DataOutputStream ds = new DataOutputStream(f); byte b = 24; int i = 1024; long l = 10241024; double d = 12.12345; String s = "Yaho! Java"; ds.writeBoolean(false); ds.writeByte(b);

Page 23: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 예제 코드 ] ds.writeChar('K'); ds.writeInt(i); ds.writeLong(l); ds.writeDouble(d); ds.writeUTF(s); ds.close(); } catch(Exception e) { System.out.println("exception: " + e); } } } [ 실행 결과 ] C:\java\c10>java DataOutputStreamDemo obj.dat C:\JAVA\NewBook\c10>type obj.dat K 쏡 @(?4 煉 Yaho! Java

Page 24: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 10.3.4 DataInputStream o 생성자 DataInputStream(InputStream is) o DataInputStream 클래스의 메소드

byte readByte() throws IOException 스트림에서 읽은 byte 를 반환 char readChar() throws IOException 스트림에서 읽은 문자를 반환 String readLine() throws IOException 스트림에서 읽은 문자열을 반환 short readShort() throws IOException 스트림에서 읽은 short 를 반환 double readDouble() throws IOException 스트림에서 읽은 double 을

반환 int readInt() throws IOException 스트림에서 읽은 정수를 반환 long readLong() throws IOException 스트림에서 읽은 long 을 반환 boolean readBoolean() throws IOException 스트림에서 읽은 boolean 을 반환 String readUTF() throws IOException UTF 로 코딩된 스트림에서 읽은 문자열을 반환 int skipBytes(int n) 스트림에서 n 바이트를 건너뜀

Page 25: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 예제 코드 ] import java.io.*; class DataInputStreamDemo { public static void main(String args[]) { try { FileInputStream f = new FileInputStream(args[0]); DataInputStream ds = new DataInputStream(f); boolean bb = ds.readBoolean(); byte b = ds.readByte(); char c = ds.readChar(); int i = ds.readInt(); long l = ds.readLong(); double d = ds.readDouble(); String s = ds.readUTF(); System.out.println("boolean = "+bb); System.out.println("byte = "+b); System.out.println("char = "+c);

Page 26: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 예제 코드 ] System.out.println("long = "+l); System.out.println("double = "+d); System.out.println("String = "+s); ds.close(); } catch(Exception e) { System.out.println("exception: " + e); } } } [ 실행 결과 ] C:\JAVA\NewBook\c10>java DataInputStreamDemo obj.dat boolean = false byte = 24 char = K long = 10241024 double = 12.12345 String = Yaho! Java

Page 27: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 10.4 문자 스트림 10.4.1 Writer 클래스와 Reader 클래스 - 추상 클래스 - 문자 입출력에 필요한 기본 메소드를 정의

o Writer 클래스의 메소드 void close() 출력 스트림을 닫음 void flush() 버퍼에 저장된 데이터를 출력 void write(int c) c 의 하위 16 비트를 출력 void write(char buf[]) buf[] 의 문자들을 출력 void write(char buf[], int index,int size) buf[] 의 index 에서 size 만큼의 문자들을 출력 void write(String s) 문자열 s 를 출력 void write(String s, int index,int size) 문자열의 index 에서 size 만큼의 문자들을 출력

Page 28: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 o Reader 클래스의 메소드 void close() 입력 스트림을 닫음 int read() 스트림에서 다음 문자를 읽어 반환 int read(char buf[]) 스트림에서 buf[] 만큼의 문자를 읽음 int read(char buf[], int offset, int size) 스트림에서 size 만큼의 문자를 읽어서 buf[] 의 offset 위치에 저장 , 반환값은 읽은 문자수임 void mark(int numChars) 입력스트림의 현재 위치에 mark boolean markSupported() 현 입력스트림의 mark() 지원 여부를

반환 boolean ready() 현 입력스트림에서 read() 문을 수행가능 여부를 반환 void reset() 입력 스트림의 현재 위치에서 가장 가까운 mark 표시로 이동 int skip(long numChars) 입력 스트림에서 numChars 수 만큼의 문자를 건너뛰고 실제 건너뛴 문자수를 반환

Page 29: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 10.4.2 FileWriter 클래스와 FileReader 클래스 o FileWriter 클래스의 생성자 FileWriter(String filepath) throws IOException FileWriter(String filepath, boolean append) throws IOExceptio

n FileWriter(File fileobj) throws IOException [ 예제 코드 ] import java.io.*; public class FileWrite1 public static void main(String args[]) throws IOException { FileWriter fw = new FileWriter(args[0]); for(int x=1; x<=10; x++) fw.write("Line number: " + x + "\n"); fw.close(); } } [ 실행 결과 ] C:\java\c10>java FileWrite1 data.txt

Page 30: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 o FileReader 클래스의 생성자 FileReader(String filepath) throws FileNotFoundException FileReader(File fileObj) throws FileNotFoundException

[ 예제 코드 ] import java.io.*; public class FileRead1 { final static int EOF = -1; public static void main(String args[]) throws IOException {

FileReader f=new FileReader(args[0]); int ch; while((ch=f.read()) != EOF) System.out.print((char) ch); f.close(); } }

Page 31: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 실행 결과 ] C:\java\c10>java FileRead1 data.txt Line number: 1 Line number: 2 Line number: 3 Line number: 4 Line number: 5 Line number: 6 Line number: 7 Line number: 8 Line number: 9 Line number: 10

Page 32: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 10.4.3 OutputStreamWriter 클래스 InputStreamReader 클래스 1) OutputStreamWriter 클래스 - 문자 출력 스트림을 바이트 출력 스트림으로 변경 o 생성자 OutputStreamWriter(OutputStream os) OutputStreamWriter(OutputStream os, String encoding) 2) InputStreamReader 클래스 - 바이트 입력 스트림을 문자 입력 스트림으로 변경 o 생성자 InputStreamReader(InputStream is) InputStreamReader(InputStream is, String encoding)

예 ) 키보드로부터 유니코드 문자 스트림으로 변환하는 코드 InputSteamReader inReader = new InputStreamReader(Syste

m.in);

Page 33: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 10.4.4 Buffered 문자 스트림 - 입출력 효율의 향상 - readLine() 메소드 지원

o BufferedWriter 클래스의 생성자 BufferedWriter(Writer os) BufferedWriter(Writer os, int bufsize)

o BufferedReader 클래스의 생성자 BufferedReader(Reader is) BufferedReader(Reader is, int bufsize)

Page 34: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 예제 코드 ] import java.io.*; public class FileWrite2 { public static void main(String args[]) { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); // 바이트 스트림 → 문자

스트림 try{ FileWriter fw = new FileWriter(args[0]); while(true) { System.out.print("Your input: "); String input = in.readLine(); if (input.startsWith("end")) break; System.out.println("Your input is " + input); fw.write(input + "\r\n"); } fw.close(); } catch(IOException e) { System.out.println(e); } } }

Page 35: Java  파일 입출력

10. 10. 파일 입출력파일 입출력

[ 실행 결과 ]

C:\java\c10>java FileWrite2 data.txt Your input: I love you Your input is I love you Your input: Love is forever Your input is Love is forever Your input: end

C:\java\c10>type data.txt I love you Love is forever

Page 36: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 10.4.5 StreamTokenizer 클래스 - 문자스트림과 분리자를 입력받아 토큰을 생성 o StreamTokenizer 클래스에서 제공되는 클래스 상수

TT_EOF 파일의 끝 TT_EOF 라인의 끝 TT_NUMBER 읽은 토큰이 숫자임 TT_WORD 읽은 토큰이 단어임

Page 37: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 o StreamTokenizer 클래스의 메소드

int lineno() 현재의 라인 번호를 반환 int nextToken() 토큰이 숫자이면 , TT_NUMBER 를 , 단어이면 TT_WORD 를 , 아니면 읽은

문자를 반환 void lowerCaseMode (boolean flag) flag 가 true 이면 , 모든 토큰이 소문자로 취급 String toString() 현재의 토큰과 동일한 문자열을

반환 void whitespaceChars (int c1, int c2) c1-c2 사이의 모든 문자를 공란으로 취급 void wordChars (int c1,int c2) c1-c2 사이의 모든 문자를 단어로 취급 void ordinaryChar(int i) i 를 정규 문자로 지정

Page 38: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 예제 코드 ] import java.io.*; class StreamTokenizerDemo { public static void main(String args[]) throws IOException { InputStreamReader fr = new InputStreamReader(System.in); StreamTokenizer st = new StreamTokenizer(fr); st.whitespaceChars('a', 'z'); // 영문 소문자 a-z 를

공란으로 취급 while(st.nextToken() != StreamTokenizer.TT_EOF) { // 다음 토큰을 읽고 , 스위치문 실행 System.out.print("\t"); switch(st.ttype) { case st.TT_WORD: System.out.println("Line# "+st.lineno()+" Word) "+st.sval); break; case st.TT_NUMBER: System.out.println("Line# "+st.lineno()+"Number) "+st.nval); break; default: System.out.println("Line#"+st.lineno()+" Special char)" + (char)st.ttype); }}}}

Page 39: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 실행 결과 ]

C:\java\c10>java StreamTokenizerDemo KIM LOVE COMputer !!! 123 // 키보드 입력 Line# 1 Word) KIM Line# 1 Word) LOVE Line# 1 Word) COM Line# 1 Special char) ! Line# 1 Special char) ! Line# 1 Special char) ! Line# 1 Number) 123.0 See YOU // 키보드 입력 Line# 2 Word) S Line# 2 Word) YOU ^z (control-z 는 파일의 끝을 나타냄 )

Page 40: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 10.5 객체의 입출력 10.5.1 ObjectOutputStream/ObjectInputStream - 객체 입출력을 지원하는 클래스 o ObjectOutputStream 클래스의 생성자 ObjectOutputStream(OutputStream out) throws IOException 예 ) FileOutputStream fs = new FileOutputStream("xyz.dat"); ObjectOutputStream os = new ObjectOutputStream(fs); o ObjectOutputStream 클래스의 주요 메소드 void writeObject(Object obj) throws IOException 객체 obj 를

출력 void write(byte b[]) throws IOException 바이트 배열 b 를 출력 public void close() throws IOException 스트림을 닫음

- 객체 입출력을 위해서는 Serializable 인터페이스를 구현하여야 한다 . 예 ) class Person implements Serializable { ........... }

Page 41: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 o ObjectInputStream 클래스의 생성자 ObjectInputStream(InputStream in) throws IOException, StreamCorruptedException

o ObjectInputStream 클래스의 주요 메소드

Object readObject() throws IOException, OptionalDataException, ClassNotFoundException 입력 스트림에서 객체를 읽음 int read(byte b[], int offset, int numChars) throws IOException numChars 만큼의 바이트를 읽어 배열 b 의 offset

에서부터 저장 int available() throws IOException 읽을 수 있는 바이트 수를

반환 int read() throws IOException 바이트를 읽고 반환 void close() throws IOException 입력 스트림을 닫음

Page 42: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 객체 저장 예제 코드 ] import java.io.*; class Person implements Serializable { String name; int id; Person(String name, int id) { this.name = name; this.id = id; } } class SerializePerson { public static void main(String args[]) { Person p1 = new Person("Kim", 7); Person p2 = new Person("Lee", 8); Person p3 = new Person("Park", 12); try { FileOutputStream fs=new FileOutputStream("obj.dat"); ObjectOutputStream os = new ObjectOutputStream(fs); os.writeObject(p1); os.writeObject(p2); os.writeObject(p3); os.close(); System.out.println("date object stored"); } catch (IOException e) { e.printStackTrace(); } } }

Page 43: Java  파일 입출력

10. 10. 파일 입출력파일 입출력[ 객체 입력 예제 코드 ] class Person implements Serializable { String name; int id; Person(String name, int id) { this.name = name; this.id = id; } } class UnSerialize { public static void main(String args[]) { Person p1 = null; Person p2 = null; Person p3 = null; try { FileInputStream fs=new FileInputStream("obj.dat"); ObjectInputStream os = new ObjectInputStream(fs); p1 = (Person) os.readObject(); p2 = (Person) os.readObject(); p3 = (Person) os.readObject(); os.close(); } catch (Exception e) { e.printStackTrace(); } System.out.println("Person1 = " + p1.name+" "+p1.id); System.out.println("Person2 = " + p2.name+" "+p2.id); System.out.println("Person2 = " + p3.name+" "+p3.id); } }

[ 실행 결과 ] C:\java\c10>javac UnSerialize.java C:\java\c10>java UnSerialize Person1 = Kim 7 Person2 = Lee 8 Person2 = Park 12

Page 44: Java  파일 입출력

10. 10. 파일 입출력파일 입출력

10.5.2 객체 배열의 사용 - Person 객체 배열의 선언 Person[] p = new Person[4]; - 각 배열의 요소에 객체 할당 p[0] = new Person("kim", 12); p[1] = new Person("lee", 7); - p[0] 의 메소드 또는 변수 참조 result1 = p[0].m() result2 = p[0].x

Page 45: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 예제 코드 ] class Person { String name; int id; Person(String name, int id) { this.name = name; this.id = id; } public String toString() { String s = name + " " + id; return s; } public void print() { System.out.println("ID#"+id+"\t name:"+name); } } class ObjectArray { public static void main(String a[]) { Person p[]={new Person("Kim", 7), new Person("Lee", 4)}; Person[] q = new Person[2]; q[0] = p[0]; // 동일한 객체를 가리킴 q[1] = new Person("Park", 12); p[0].print(); // p[0] 의 메소드 접근 q[1].print(); // q[1] 의 메소드 접근

Page 46: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 예제 코드 ] System.out.println("p[0] = "+p[0]); System.out.println("p[1] = "+p[1]); System.out.println("q[0] = "+q[0]); System.out.println("q[1] = "+q[1]); } }

[ 실행 결과 ] C:\JAVA\NewBook\c10>java ObjectArray ID#7 name:Kim ID#12 name:Park p[0] = Kim 7 p[1] = Lee 4 q[0] = Kim 7 q[1] = Park 12

Page 47: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 10.6 RandomAccessFile [RandomWrite.java] import java.io.*; class Tel_Book { String name; int tel_no; Tel_Book(String n, int no) { name = n; tel_no = no; } } class RandomWrite { static final int FILESIZE = 40; static long hash(String s) { int addr = 0; for(int k =0; k < s.length(); k++) addr += (k+2) * (int) s.charAt(k); return (long) (addr % FILESIZE); }

Page 48: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 public static void main(String a[]) throws IOException { Tel_Book p[]= { new Tel_Book("Cho", 1111), new Tel_Book("Jung", 4315), new Tel_Book("Lee", 4157), new Tel_Book("Oh", 4902), new Tel_Book("Park",7878)}; for(int k=0; k < p.length; k++) System.out.println(p[k].name+"\t key= " + hash(p[k].name)); RandomAccessFile f= new RandomAccessFile("tel.dat","rw"); for(int k=0; k < FILESIZE; k++) f.writeInt(0); // save 20 int values for(int k=0; k < p.length; k++) { f.seek(hash(p[k].name)); f.writeInt(p[k].tel_no); } f.close(); } }

Page 49: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [ 실행 결과 ] c:\java RandomWrite Cho Key= 10 Jung Key= 14 Lee Key= 19 Oh Key= 30 Park Key= 2

Page 50: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [RandomRead.java]

import java.io.*; class RandomRead { static final int FILESIZE = 40; static long hash(String s) { int addr = 0; for(int k =0; k < s.length(); k++) addr += (k+2) * (int) s.charAt(k); return (long) (addr % FILESIZE); } public static void main(String a[]) throws IOException { RandomAccessFile f= new RandomAccessFile("tel.dat","r"); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); while(true) { System.out.print("Key Name: "); String name = in.readLine();

Page 51: Java  파일 입출력

10. 10. 파일 입출력파일 입출력 [RandomRead.java]

if(name.equals("end")) break; System.out.println(name+" hash= "+hash(name)); f.seek(hash(name)); int no = f.readInt(); System.out.println(name+ ": "+ no); } f.close(); } }

[ 실행 결과 ] c:\> java RandomRead Key Name: Cho Cho hash= 10 Cho: 1111 Key Name: Jung Jung hash= 14 Jung: 4315