Transcript
Page 1: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

자바 네트워크 프로그래밍

(OCJP 국제공인자격 취득 중심)

충북대학교

최민

Page 2: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

2

File Class

File 클래스

파일의 읽고 쓰기를 제외하고 파일과 디렉토리에 대한 필요한 많은

기능등을 제공

파일과 디렉토리의 정보를 조사하고, 이들을 생성 및 삭제하는 메소

드 등이 File 클래스에 포함

File 클래스의 생성자

File(File parent, String child)

File(String pathname)

File(String parent, String child)

File(URI uri)

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 3: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

3

File 클래스의 메소드

boolean exists() : 지정한 파일 또는 디렉토리가 존재하는지 여부를 리턴합니다.

boolean isDirectory() : 지정한 경로가 디렉토리인지의 여부를 리턴합니다.

boolean isFile() : 지정한 경로가 파일인지의 여부를 리턴합니다.

boolean canRead() : 지정한 파일이 읽기 가능한지의 여부를 리턴합니다.

boolean canWrite() : 지정한 파일이 쓰기 가능한지의 여부를 리턴합니다.

long length() : 파일의 길이를 리턴합니다.

String[] list() : 해당 경로에 있는 파일과 디렉토리의 목록을 String 배열로 리턴합니다.

File[] listFiles() : 해당 경로에 있는 파일의 목록을 File 배열로 리턴합니다.

String getName() : 해당 경로에 있는 파일이나 디렉토리의 이름을 리턴합니다.

String getParent() : 해당 경로의 상위 디렉토리의 경로명을 리턴합니다.

String getPath() : 인스턴스가 가지고 있는 경로명을 문자열로 리턴합니다.

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 4: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

4

File 클래스의 메소드

boolean createNewFile() : 인스턴스가 가리키고 있는 이름대로 파일

을 생성합니다.

boolean delete() : 인스턴스가 가리키고 있는 파일 또는 디렉토리를

삭제합니다.

void deleteOnExit() : delete와 같은 일을 하지만 Vitrual Machine

이 종료될 때 삭제가 일어납니다.

boolean mkdir() : 인스턴스가 가리키고 있는 경로대로 디렉토리를 만

듭니다.

boolean mkdirs() : mkdir과 같은 일을 하지만, 디렉토리 구조 전체를

만들어줍니다.

boolean renameTo(File) : 기존 파일의 이름을 바꿉니다.

boolean setReadOnly() : 해당 파일을 읽기 전용 파일로 만듭니다.

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 5: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

5

[NOTE]

File 클래스에 관한 OCJP 문제 출제 경향

(가장 빈도가 높은 것) 메소드의 이름과 기능을 정확하게 알고 있는

가에 관한 문제

함정 문제가 많이 출제되므로 API 문서를 참고하시고 특히 메소드의

이름을 잘 숙지.

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 6: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

6

File의 사용

인스턴스의 생성

File file = new File("scjp.txt");

파일의 존재 유무 확인

File file = new File("scjp.txt");

if(!file.exists()) {

System.out.println(file.getName() + " is not exists!");

System.exit(0);

}

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 7: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

7

파일 / 디렉토리 판정

File file = new File("c:\windows");

if(file.isDirectory()) System.out.println(file.getName() + " is a

directory.");

if(file.isFile()) System.out.println(file.getName() + " is a file.");

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 8: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

8

파일의 경로 정보

File 클래스의 주된 기능

지정된 파일 또는 디렉토리에 관한 정보를 알려주는 기능

특히, File 클래스를 통해 파일의 경로(path)에 관한 정보를 다양한

형식으로 알아낼 수 있음.

주요 메소드

getPath() 메소드는 인스턴스를 만들때 생성자로 입력된 경로명을

리턴 (abstract pathname이라고 합니다)

getAbsolutePath() 메소드는 생성자로 입력된 경로명을 절대 경로로

바꾸어서 리턴

즉, 생성자로 입력된 경로명이 상대 경로일 경우에는 프로그램이 실

행된 디렉토리를 기준으로 하여 절대 경로로 바꾸는 작업

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 9: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

9

파일의 경로 정보

메소드는 얻어진 절대 경로를 시스템에서 사용하는 형식의

getCanonicalPath() 메소드는 좀더 정규화된 형태의 절대 경로를 리턴하는 메소드

getCanonicalPath() 절대 경로로 바꾸어 줌, 예를 들어 유닉스 시스템의 경우 심볼릭 링크로 연결된 파일을 실제의 경로로 바꾸는 작업

윈도우 시스템의 경우 드라이브 문자를 대문자로 바꾸어 주고 실제

존재하는 파일의 경우 대소문자까지 원래의 파일명과 같이 맞추어

줌(윈도우 시스템은 대소문자를 구별하기는 하지만 대소문자를 틀리게 입력해도 같은 파일/폴더로 간주)

따라서 getAbsolutePath() 보다 정확한 경로명을 리턴하는

getCanonicalPath()를 사용하기를 추천

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 10: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

10

파일의 경로 정보

다만, getCanonicalPath() 메소드를 사용할 때에는 한가지 주의할 점

경로를 알아내는 다른 명령어와는 달리 이 메소드는 시스템에 파일

시스템 정보를 요청하기 때문에 IOException을 발생시킬수 있도록

설계되었다는 점

따라서 getCanonicalPath()를 사용할 때에는 반드시 IOException을

처리(try-catch)하도록 해야 함.

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 11: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

11

파일 및 디렉토리의 생성과 삭제, 변경

File 클래스를 사용하여 파일이나 디렉토리를 생성

우선 생성할 파일이나 디렉토리의 경로명으로 File 클래스 인스턴스

를 생성

File file = new File(생성할 파일 또는 디렉토리의 경로);

파일을 만들기 위해서는 createNewFile(),

디렉토리를 만들기 위해서는 mkdir()이나 mkdirs() 메소드를 사용

이들 메소드는 이미 파일 객체가 경로명을 가지고 있기 때문에 아무

런 파라미터도 전달하지 않아도 됨.

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 12: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

12

파일 및 디렉토리의 생성과 삭제, 변경

mkdir() 메소드와 mkdirs() 메소드의 차이

해당 디렉토리의 상위 디렉토리 구조가 없을 경우, 이를 만들어 주느냐의 차이입니다. mkdirs() 메소드는 주어진 경로명에 포함된 모든

디렉토리 구조를 만들어 줌

위의 예에서 아직 language나 java 디렉토리가 아직 없는 경우

mkdir() 메소드는 디렉토리를 만들지 못했음을 뜻하는 false를 리턴

mkdirs() 메소드는 language나 java 디렉토리까지 전부 만들어 줌

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

File dir = new File("language/java/scjp");

dir.mkdir();

dir.mkdirs();

Page 13: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

13

파일 및 디렉토리의 생성과 삭제, 변경

createTempFile()이라는 메소드

createNewFile() 메소드와 성격은 약간 다르지만, 파일을 만드는 기

능은 동일한 메소드

static 메소드임 (따라서, 아래 예제와 같이 사용 가능)

프로그램에서 사용하기 위한 임시 파일을 생성

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

File file = File.createTempFile(파일명, 확장자);

File file = File.createTempFile(파일명, 확장자, 디렉토리명);

Page 14: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

14

파일 및 디렉토리의 생성과 삭제, 변경 import java.io.*;

public class Test {

public static void main(String[] args) throws IOException {

File file = new File("scjp");

System.out.println("the file exists : " + file.exists());

file.createNewFile();

System.out.println("File created.");

System.out.println("the file exists : " + file.exists());

if(file.isFile()) {

System.out.println("this object is file.");

} else if(file.isDirectory()) {

System.out.println("this object is directory.");

}

}

}

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 15: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

15

import java.io.*;

public class Test {

public static void main(String[] args) throws

IOException {

File file = new File("abc/../pds/java");

System.out.println(file.getPath());

System.out.println(file.getAbsolutePath());

System.out.println(file.getCanonicalPath());

}

}

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 16: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

16

Which one gets the name of the parent directory of file "file.txt"?

a. String name = File.getParentName("file.txt")

b. String name = (new File ("file.txt").getParent());

c. String name = (new File ("file.txt").getParentName());

d. String name = (new File ("file.txt").getParentFile());

e. Directory dir = (new File ("file.txt").getParentDir());

f. String name = dir.getName();

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 17: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

17

스트림

Stream

데이터의 입출력을 데이터의 흐름(stream)처럼 취급하는 방법

자바에서 입출력의 핵심

자바에서는 이 stream을 추상화하여 InputStream과 OutputStream

두개의 클래스를 제공

Stream과 추상화(abstraction)

Stream을 사용하면 local machine에 있는 파일이나 네트웍을 통해

전달되는 데이터 등을 모두 같은 방법으로 처리할 수 있다는 장점

사용자는 실제 데이터가 있는 정확한 위치에 대한 정보를 조사하거

나 데이터의 입출력 방법을 따로 정의하거나 할 필요 없이 stream을

제어하는 방법만 알면 됨

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 18: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

18

InputStream의 하위 클래스 상속 관계

자바에서는 제공하는 Stream 클래스

입력을 위한 InputStream 추상 클래스와 출력을 위한 OutputStream

추상 클래스

용도에 따라 많은 클래스들이 이들의 하위 클래스로 정의됨

자바에서 제공하는 대표적인 입출력 stream 클래스들의 계층 구조

는 다음 슬라이드와 같음

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 19: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

19

OutputStream의 하위 클래스 상속 관계

InputStream

- FileInputStream

- FileterInputStream

- BufferedInputStream

- DataInputStream

- ObjectInputStream

- ByteArrayInputStream

- PipedInputStream

OutputStream

- FileOutputStream

- FilterOutputStream

- BufferedOutputStream

- DataOutputStream

- ObjectOutputStream

- ByteArrayOutputStream

- PipedOutputStream

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 20: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

20

FileOutputStream을 이용해서 파일을 생성

import java.io.*;

public class Test {

public static void main(String[] args) throws IOException {

File file = new File("scjp.txt");

FileOutputStream fos = new FileOutputStream(file);

for(int i=0;i<5;i++) {

fos.write(i);

}

fos.close();

if(file.exists()) System.out.println("File length : " + file.length());

}

}

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 21: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

21

자바 Stream 의 2가지 분류

자바에서 스트림은 그 용도에 따라 두가지로 나눌 수 있는데,

하나는 데이터를 제공하는 소스로부터 직접 데이터를 읽어오는 일을 하는

스트림

File 스트림이

스스로 데이터를 읽어오는 기능을 가지고 있지는 않지만, 다른 스트림으로

부터 데이터를 입력받아 좀더 발전된 형태로 가공하는 스트림. 즉, “스트림

을 거르는 스트림”

filter 스트림

filter 스트림의 최상위 클래스는 InputStream

/OutputStream의 서브클래스인 FilterInputStream과

FilterOutputStream 클래스임

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 22: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

자바 Stream 의 2가지 분류

FilterInputStream과 FilterOutputStream은 실제로 자

주 사용되지는 않지만, 다른 스트림으로부터 데이터를 받아

가공하기 위한 중요한 기능 하위 클래스들을 위해 제공

Fileter 스트림에는 여러 가지가 있는데, Data 스트림과

Buffered 스트림에 대해 살펴보도록 함.

22 자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 23: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

23

자바 Stream 의 2가지 분류

Data 스트림 도입 필요성

기본적인 InputStream과 OutputStream은 byte 단위의 이진 데이터

의 읽고 쓰기만을 지원

따라서 좀더 데이터를 융통성 있게 다루기 위해 만들어진 filter 스트

림이 Data 스트림입니다.

Data 스트림

자바의 기본 데이터 타입을 스트림을 통해 읽고 쓸 수 있도록 지원

즉 byte나 int등의 수치형, char형, char의 집합이라고 할 수 있는

String, 그리고 마지막으로 UTF(Unicode Text Format) 방식으로 인

코딩된 문자열을 읽고 쓸 수 있도록 함

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)

Page 24: 자바 네트워크 프로그래밍contents.kocw.net/KOCW/document/2014/Chungbuk/choimin/13.pdf · 자바 네트워크 프로그래밍 (ocjp 국제공인자격증 취득 대비) 자바

24

import java.io.*;

public class Test {

public static void main(String[] args) throws IOException {

File file = new File("scjp.txt");

FileInputStream fis = new FileInputStream(file);

BufferedInputStream bis = new BufferedInputStream(fis);

DataInputStream dis = new DataInputStream(bis);

int value[] = new int[10];

for(int i=0;i<10;i++) {

value[i] = dis.readInt();

}

}

}

자바 네트워크 프로그래밍 (OCJP 국제공인자격증 취득 대비)


Recommended