자바프로그래밍

파일 입출력(IO패키지)

제주도소년 2020. 5. 28. 11:40

[ 파일 ]

- 파일과 , 디렉토리(식별자) 를 통 틀어서 파일 이라고 한다.

- 경로 구분은 \ 로 하고 시스템 마다 다를 수 있다.

- 디스크 상의 존재 여부에 따라 논리적 파일 , 물리적 파일로 나뉜다.

 

- IO 패키지에서 제공하는 File 클래스는 디렉토리를 나타낼 수도 있고 파일도 나타낼 수 있다.

- 사용 가능한 메소드는 아래와 같다 .. 더 있으니까 API 문서를 참고 

createNewFile , mkdir, mkdirs, delete, lastModified, exists , isFile , isDirectory, getParent, getName

 

절대경로 , 상대경로

절대경로 : Root로 부터 출발하는 경로 ( C:\Program Files\Java\jdk1.8.0_221 ) getPath() 로 경로 얻어낼 수 있음

상대경로 : 현재 위치가 출발 점 (  . (현재위치) ..(상위폴더)  ) getCanonicalPath() 로 경로 얻어낼 수 있음

 

 

[ 스트림 ]

스트림은 Input 과 Output 이 있으며 , byte 단위 연산과 char 단위 연산으로 나뉜다.

 

FileOutputStream

- 외부 자원에 접근

- 생성자에 매개변수로 File 을 주거나 경로를 넣을 수 있다.

- 2번째 매개변수로 true 로 주면 파일을 쓸 때 계속 붙여 넣는다 ( appendable )

 

FileInputStream

- 파일에 있는 내용을 읽을 수 있음

- JDK 1.7 부터 아래와 같이 사용할 수 있다. 단 조건은 AutoCloseable 을 구현한 클래스만 사용 가능

InputStream

- byte 입력 스트림을 나타내는 모든 클래스의 슈퍼 클래스

- 입력 스트림에 엔터( \r + \n ) 포함된다.

 

InputStreamReader

- byte -> char 바이트를 읽어 지정된 문자로 디코딩(브릿지)

 

BufferedReader

- 문자를 버퍼링 하므로, 배열 및 행을 효율적으로 읽을 수 있음

 

PrintWriter

- 문자열을 다양한 형태로 출력 스트림에 출력

- 반드시 flush() 해야한다. 버퍼를 비워주지 않으면 어떠한 기능도 수행하지 않음

 

FileWriter

파일에 문자를 쓰기 위해 사용

 

데코레이션 패턴

InputStream -> InputStreamReader -> BufferedReader ( String )-> PrintWriter -> FileWriter ( File )

 

데코레이션 패턴의 예

더보기
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;

public class IOEx3 {

	public static void consoleToFile(String fileName) {
		InputStream is = null;
		InputStreamReader isr = null;
		BufferedReader br = null;
		
		FileWriter fw = null;
		
		// 줄 단위로 쓰는거
		PrintWriter pw = null;
		
		try {
			//표준 입력
			is = System.in;
			
			//
			isr = new InputStreamReader(is);
			
			
			br = new BufferedReader(isr);
			
			fw = new FileWriter(fileName);
			
			pw = new PrintWriter(fw);
			
			String line = null;
			
			while((line = br.readLine()) != null) {
				//fw.write(line);
				pw.printf("%s\n", line);
//				pw.write(line + "\r\n");
				
			}
			
			//내용을 비운다 .. (출력을 보장)
			pw.flush();
			
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 자원 해제 : 생성된 역순으로 닫는다.
			MyUtils.closeAll(br, isr, is);
		}
	}
	
	public static void main(String[] args) {
		consoleToFile("console.txt");
	}

'자바프로그래밍' 카테고리의 다른 글

파일입출력(Data : InputStream, OutputStream)  (0) 2020.06.01
[JAVA] 예외처리  (0) 2020.04.29
[JAVA] 로또 프로그램(컬렉션 사용)  (0) 2020.04.26
List  (0) 2020.04.23
컬렉션  (0) 2020.04.23