hyeonga_code

Java의 신2_Chapter 8_I/O 본문

Java

Java의 신2_Chapter 8_I/O

hyeonga 2024. 4. 3. 07:59
반응형

2024.04.02

 

- I/O_Input/Output

-- 프로그램의 내용을 파일에 읽거나 저장할 경우

-- 프로그램의 내용을 다른 서버나 디바이스로 보내는 경우

 

-- java.io

---- 바이트 기반의 데이터를 처리하기 위해 여러 종류의 Stream 클래스를 제공

---- 바이트가 아닌 char 기반의 문자열로 되어 있는 파일은 Reader와 Writer 클래스로 처리

---- 스트림_Stream

------ 끊기지 않고 연속적인 데이터

 

-- NIO_New I/O

---- 스트림이 아닌 버퍼와 채널 기반으로 데이터를 처리

 

-- File & Files 클래스

---- 파일과 파일의 경로를 포함한다.

---- File 클래스는 정체가 불분명하고 심볼릭 링크와 같은 유닉스 계열의 파일에서 사용하는 몇몇 기능을 제대로 제공하지 못하므로 Files 클래스에서 대체하여 제공한다.

---- File 클래스는 객체를 생성하여 데이터를 처리한다.

---- Files 클래스는 static 메소드로 선언되어 별도의 객체를 생성할 필요가 없다.

 

- File Class

-- 생성자

더보기
File(File parent, String child)
    // 이미 생성되어 있는 File 객체와 하위 경로 이름으로 새로운 File 객체를 생성

File(String pathname)
    // 지정한 경로 이름으로 새로운 File 객체를 생성

File(String parent, String child)
    // 상위 경로와 하위 경로로 File 객체를 생성

File(URI uri)
    // URI에 따른 File 객체를 생성

---- URI_Uniform Resource Identifier

------ 어떠한 리소스를 가리키기 위한 경로

 

package e.io;

import java.io.File;

public class FileSample {
    public static void main(String[] args) {
        FileSample sample = new FileSample();
        String pathName = "C:\\godofjava\\text";
        
        sample.checkPath(pathName);
        
    } //end main()
    
    public void checkPath(String pathName) {
        File file = new File(pathName);
        
        if(file.existes()) {	// 파일이 존재하는 경우 true
	        System.out.println(pathName + " is existes");
        } else {		// 파일이 존재하지 않는 경우 false
	        System.out.println(pathName + " is not existes");
        }
    } //end checkPath()
} //end class

---- OS마다 디렉터리 구분자가 다르므로 File 클래스의 separator를 사용하는 것이 가장 안전하다.

------ File.separator + "godofjava" + File.separator + "text"

---- mkdir() > 한 개의 파일 디렉터리를 생성한다.

---- mkdirs() > 여러 개의 파일 디렉터리를 생성한다.

 

isDirectory()
    // 경로를 나타내는지 확인
    
isFile()
    // 파일을 나타내는지 확인
    
isHidden()
    // 숨긴 파일인지 확인

 

-- 새로운 파일 생성

더보기
.createNewFile()

 

-- 파일의 정보를 확인하는 메소드

더보기
getFileInfo()

---- File로 끝나는 경우 File 객체를 리턴한다.

---- 경로인 경우 String 타입으로 전체 경로를 리턴한다.

 

// 절대경로_Absolute
getAbsolutePath()
getAbsoluteFile()

// 절대적이고 유일한 경로_Canonical
getCanonicalPath()
getCanonicalFile()

 

-- 파일 이름을 제외한 경로만 조회

getParent()

 

-- 디렉터리에 있는 목록을 살펴보기 위한 list 메소드

더보기
static File[] listRoots()
    // JVM이 수행되는 OS에서 사용중인 파일 시스템의 루트 디렉터리 목록을 File 배열로 리턴

String[] list()
    // 현재 디렉터리의 하위에 있는 목록을 String 배열로 리턴

String[] list(FilenameFilter filter)
    // 현재 디렉터리의 하위에 있는 목록 중, filter 조건에 맞는 목록을 String 배열로 리턴

File[] listFiles()
    // 현재 디렉터리의 하위에 있는 목록을 File 배열로 리턴
    
File[] listFlies(FileFilter filter)
    // 현재 디렉터리의 하위에 있는 목록 중 filter 조건에 맞는 목록을 File 배열로 리턴

File[] listFiles(FilenameFilter filter)
    // 현재 디렉터리의 하위에 있는 목록 중 filter 조건에 맞는 목록을 File 배열로 리턴

 

---- FileFilter 인터페이스 메소드

boolean accept(File pathname)
    // File 객체가 조건에 맞는지 확인

 

---- FilenameFilter 인터페이스 메소드

boolean accept(File dir, String name)
    // 디렉터리에 있는 경로나 파일 이름이 조건에 맞는지 확인

 

- InputStream

더보기
public abstract class InputStream extends Object implements Closeable

-- Closeable

---- 해당 리소스는 close() 메소드를 사용하여 종료해야 한다.

 

-- 메소드

더보기
int available()
    // 스트림에서 중단없이 읽을 수 있는 바이트의 개수를 리턴

void mark(int readlimit)
    // 스트림의 현재 위치를 mark 해두고 표시해 둔 자리의 최대 유효 길이를 매개변수로 넘긴다.
    // 값이 넘어가는 경우 표시한 자리는 의미가 없어진다.

void reset()
    // 현재 위치를 mark() 메소드가 호출된 위치로 되돌린다.

boolean markSupported()
    // mark()메소드나 reset() 메소드가 수행 가능한지 확인

abstract int read()
    // 스트림에서 다음 바이트를 읽는다.

int read(byte[] b)
    // 바이트 배열에 데이터를 담아 데이터의 개수를 리턴

int read(byte[] b, int off, int len)
    // 바이트 배열에 off 부터 len 개수 만큼의 데이터를 담아 데이터의 개수를 리턴

long skip(long n)
    // 매개 변수로 넘어온 길이 만큼의 데이터를 건너 뛴다.

void close()
    // 스트림에서 작업 중인 대상을 해제

 

---- 주로 사용하는 스트림

FileInputStream
    // 파일을 읽는 데 사용
    // 바이트 코드로 된 데이터를 읽을 때 사용 (이미지)
    
FilterInputStream
    // 다른 입력 스트림을 포괄 (InputStream 클래스가 Override)
    
ObjectInputStream
    // ObjectOutputStream으로 저장한 데이터를 읽을 때 사용

 

- OutputStream

더보기
public abstract class OutputStream extends Object implements Closeable, Flushable

-- Flushable

---- 버퍼를 갖고 데이터를 저장하고 버퍼가 차게 되면 한 번에 쓰는데 flush() 메소드를 사용하여 현재 버퍼에 있는 내용을 기다리지 않고 무조건 저장하는 것

 

-- 메소드

더보기
void write(byte[] b)
    // 바이트 배열을 저장

void write(byte[] b, int off, int len)
    // 바이트 배열의 off 위치부터 len 만큼의 길이를 저장

abstract void write(int b)
     // 매개변수로 받은 바이트를 저장

void flush()
    // 버퍼에 쓰려고 대기하고 있는 데이터를 강제로 쓰도록 한다.

void close()
    // 쓰기 위해 열은 스트림을 해제

 

 

반응형

'Java' 카테고리의 다른 글

Java의 신2_Chapter 7_Thread  (0) 2024.04.03
Java의 신2_Chapter 6_Collection Map  (0) 2024.04.03
Java의 신2_Chapter 5_Collection Set Queue  (0) 2024.04.02
Java의 신2_Chapter 4_Collection List  (0) 2024.04.02
Java의 신2_Chapter 3_Generic  (0) 2024.04.02