📌 InputStream

  • InputStream
    - 시스템 입력 기능

  • InputStreamReader
    - InputStream의 기능을 추가 보완하여 2바이트 이진수로써 나타낼 수 있는 범위를 확장한 클래스 (한글 매핑이 가능해짐)

  • BufferedReader
    - InputStreamReader 기능을 추가 보완한 클래스 (문자열 입력이 가능해짐)

  • 사용 메소드
    - read() : 입력받은 숫자값 1문자를 유니코드로 변환하여 반환한다. (try catch문 사용)
    - readLine() : BufferedReader의 메소드이며 문자열을 입력받을 수 있다. (try catch문 사용)

  • 형식
InputStream ips = System.in;
InputStreamReader ipr = new InputStreamReader(ips);
BufferedReader bf = new BufferedReader(ipr);
System.out.println("입력 : ");

try {
	// 콘솔에서 문자를 입력 받음
	int num = ipr.read();
	System.out.println(num);	// 문자와 매핑되는 유니코드 출력

	// 유니코드 -> 문자로 변환
	char ch = (char) num;
	System.out.println(ch);		// 처음 입력 받은 문자와 동일한 문자 출력

	// BufferedReader 객체를 이용해 문자열 입력 받음
	String text = bf.readLine();
	System.out.println(text);
} catch (IOException e) {
	e.printStackTrace();
}


📌 PrintStream

  • PrintStream
    - 시스템 출력 기능

  • OutputStream
    - PrintStream 클래스의 부모 클래스이다.
    - 1바이트 출력 스트림이다. (한글 출력 안됨)

  • OutputStreamWriter
    - OutputStream의 기능을 추가 보완한 클래스이다.
    - 2바이트 출력 스트림이다. (한글 출력 가능)
    - 문자열을 입력 받아 출력할 수도 있다.

  • 사용 메소드
    - write() : 파라미터로 전달된 숫자나 문자열, Array들을 문자로 출력하는 메소드 (try catch문 사용)

  • 형식
PrintStream ps = System.out;
OutputStream os = ps;
OutputStreamWriter osw = new OutputStreamWriter(os);
try {
	osw.write(97);		// 문자 'a' 출력
	osw.write(44032);	// 문자 '가' 출력
	osw.write("aa");	// 문자열 "aa" 출력
	osw.flush();
} catch (IOException e) {
	e.printStackTrace();
}


📌 File 클래스

  • File
    - 파일 입출력을 지원하는 클래스

  • 사용 메소드
    - 객체.list() : File 객체가 지정한 경로의 파일 이름 리스트를 반환
    - 객체.listFiles() : 파일 하나하나에 객체를 부여하여 리스트 형태로 반환
    - 단일객체.getName() : 객체 하나(파일)의 이름을 반환
    - 단일객체.exists() : 객체 하나(파일)의 존재 유무를 반환
    - 단일객체.delete() : 객체 하나(파일)을 삭제
    - 단일객체.createNewFile() : 객체 하나(파일)을 생성 (try catch문 사용)

  • 형식
File f = new File("C:/");
// 파일 하나하나에 객체를 부여
File[] files = f.listFiles();		// [file1 객체, file2 객체, ....]
for(File file:files) {
	if(file.isDirectory()) {
		System.out.println("["+file.getName()+"]");
	} else {
		System.out.println(file.getName());
	}
}


📌 FileWriter

  • FileWriter
    - 파일에 쓰기 기능을 지원하는 클래스

  • 생성자
    - new FileWriter(File 객체, 쓰기 방식) : File 객체(파일)을 받아서 해당 파일에 쓰기 기능을 준비
    쓰기 방식 = true : 기존에 있는 내용을 유지하며 쓰는 방식
    쓰기 방식 = false : 기존에 있는 내용에 덮어쓰기하는 방식

  • 사용 메소드
    - write(String) : String 문자열을 지정한 파일에 입력함
    - flush() : 입력한 문자열들을 실제 적용을 위해 사용하는 메소드
    - close() : 쓰기 기능을 모두 사용하면 반드시 종료해야 한다.

File f = new File("C:/acorn202206/testFolder/test.txt");
try {
	if(!f.exists()) {
		f.createNewFile();
	}
	FileWriter writer = new FileWriter(f, true);
	writer.write("a1");
	writer.write("a2");
	writer.flush();
	writer.close();
} catch(IOException e) {
	e.printStackTrace();
}


📌 FileReader

  • FileReader
    - 파일에 읽기 기능을 지원하는 클래스
    - 한 문자씩 읽기 때문에 while문을 사용한다.
    - BufferedReader 객체를 사용하여 한 줄씩 읽을 수 있다.

  • 생성자
    - new FileReader(File 객체) : File 객체(파일)을 받아서 해당 파일을 읽기

  • 사용 메소드
    - read() : 커서 다음 위치의 문자을 읽음
    - close() : 읽기 기능을 모두 사용하면 반드시 종료해야 한다.

// 기본 FileReader 사용
File f = new File("C:/acorn202206/testFolder/test.txt");

try {
	if(!f.exists()) {
		f.createNewFile();
	}
	FileReader reader = new FileReader(f);
	while(true) {
		int num = reader.read();
		char ch = (char)num;
		System.out.print(ch);
		if(!reader.ready()) {
			break;
		}
	}
	reader.close();
} catch(IOException e) {
	e.printStackTrace();
}

// BufferedReader 사용
try {
	if(!f.exists()) {
		f.createNewFile();
	}
	FileReader reader = new FileReader(f);
	BufferedReader br = new BufferedReader(reader);
	while(br.ready()) {
		System.out.println(br.readLine());
	}
	br.close();
	reader.close();
} catch(IOException e) {
	e.printStackTrace();
}


📌 FileInputStream and FileOutputStream

  • FileInputStream
    - 파일 입력 스트림(읽기)을 지원하는 클래스

  • FileOutputStream
    - 파일 출력 스트림(쓰기)을 지원하는 클래스

  • 사용 메소드
    - read() : 한 바이트씩 읽는 메소드
    - read(byte[]) : 지정한 Array만큼의 바이트를 읽어내는 메소드
    - write() :
    - write(byte[], 시작 index, read한 데이터) : byte[] 객체에서 시작 index부터 read한 데이터까지 데이터를 파일에 쓴다.
    - flush() : 파일에 실제 쓰기를 적용하기 위해 사용하는 메소드

  • 형식
FileInputStream fis = null;	// 읽기 클래스
FileOutputStream fos = null;	// 쓰기 클래스

try {
	// 읽기, 쓰기 객체 정의
	fis = new FileInputStream("C:/acorn202206/testFolder/7.jpg");
	fos = new FileOutputStream("C:/acorn202206/testFolder/test.jpg");
	byte[] buffer = new byte[1024];		// 한번에 여러개의 바이트를 읽기 위한 buffer
	
	while(true) {
		// 읽기 객체를 통해 파일을 읽으면서 한 바이트가 아니라 여러 바이트를 읽도록
		// byte[] 객체를 파라미터로 전달
		// 읽은 바이트 개수는 readedByte에 저장됨
		// 실제 저장되는 데이터는 buffer 객체에 저장됨
		int readedByte = fis.read(buffer);
		System.out.println(readedByte);
		if(readedByte==-1) {
			break;
		}
		fos.write(buffer, 0, readedByte);
		fos.flush();
	}
	
} catch(Exception e) {
	e.printStackTrace();
} finally {
	try {
		if(fos!=null) fos.close();
		if(fis!=null) fis.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}


profile
데이터 사이언티스트를 목표로 하는 개발자

0개의 댓글