본문 바로가기
JAVA

221027 ByteStream-FileOutputStream, FileInputStream

ByteStream
1)InputStream과 OutputStream
=>바이트 스트림의 최상위 클래스로 추상 클래스(인스턴스 생성 못함)
=>다른 바이트 스트림들이 가져야 하는 메서드 원형을 소유


=>InputStream
int available(): 읽을 수 있는 바이트 수 리턴
void close() : 닫기
int read(): 한 바이트를 읽어서 정수로 리턴하고 읽지 못하면 음수(-1)를 리턴
int read(byte[] b): 배열만큼 읽어서 b에 저장하고 읽은 개수를 리턴 -0이나 음수가 리턴되면 읽기 실패
int read(byte[] b, int offset, int length) : offset부터 length만큼 읽어서 b에 저장하고 읽은 개수를 리턴
long skip(long n) : n만큼 넘어가기

=>OutputStream-기록
void close() : 닫기
void write(int n) : n을 기록
void write(byte[] b) : b배열을 기록 
void write(byte[] b, int offset, int length) : b배열에서 offset에서 length만큼 기록
void flush() : 버퍼의 내용을 출력

=>★스트림은 열면 반드시 닫아야 함


2)바이트 단위 파일 입출력
=>FileInputStream과 FileOutputStream
=>바이트 단위로 파일에 기록
바이트 단위로 파일에 기록을 하는 클래스:FileOutputStream
생성자에 boolean append가 있거나 없는데, 없으면 매번 새로 만들고, 있으면 추가하는 방식임

 


+)생성자가 안보인다면 추상클래스인지 확인, 모든 멤버가 static인지 확인. 아니면 싱글톤인지 확인

 

package java_1027.fileinformation;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.UUID;

public class MainClass {
	public static void main(String[] args) {
		//바이트 단위로 파일에 기록하기
		try {
			//오늘 날짜를 문자열로 만들기
			Date date = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			//기록할 파일 만들기
			FileOutputStream fos = new FileOutputStream("C:\\Users\\user\\Desktop\\" + sdf.format(date)+".bat", true);//로그 기록-절대경로
			
//			String file = UUID.randomUUID().toString();
//			
//			FileOutputStream fos2= new FileOutputStream("./" + file+".txt", true);//로그 기록-상대경로, 랜덤한 문자열 파일이름
//			
			//기록할 메시지 생성
			String msg = " msg %username% Hi \n";
			
			//파일에 기록
			fos.write(msg.getBytes());
			
			//파일을 닫기
			fos.close();
			
		} catch (Exception e) {
			System.out.println("파일 기록 실패");//경로에 디렉토리가 없으면 실행.
			System.out.println(e.getLocalizedMessage());//지정된 경로를 찾을 수 없습니다 출력-어떤 문제가 생겼는지를 확실히 알 수 있음
			
			
		}
		
		
		//앞에서 작성한 파일 읽기
		try {
			//읽기위한 파일 생성
			FileInputStream fis = new FileInputStream("C:\\Users\\user\\Desktop\\2022-10-27.bat");
			//읽어서 저장할 바이트 배열을 생성
			byte[] b = new byte[fis.available()];
			//읽기
			fis.read(b);
			//읽은 내용 확인
			System.out.println(new String(b));
			System.out.println(Arrays.toString(b));//아스키코드값으로 출력
			
			fis.close();
			
		} catch (Exception e) {
			System.out.println(e.getLocalizedMessage());
			
			
		}
		
		
		
	}

}

 

 msg %username% Hi 
 msg %username% Hi 
 msg %username% Hi 
 msg %username% Hi 
 msg %username% Hi 
 msg %username% Hi 
 msg %username% Hi 
 msg %username% Hi   msg %username% Hi   msg %username% Hi   msg %username% Hi 
 msg %username% Hi 
 msg %username% Hi 

[32, 109, 115, 103, 32, 37, 117, 115, 101, 114, 110, 97, 109, 101, 37, 32, 72, 105, 32, 10, 32, 109, 115, 103, 32, 37, 117, 115, 101, 114, 110, 97, 109, 101, 37, 32, 72, 105, 32, 10, 32, 109, 115, 103, 32, 37, 117, 115, 101, 114, 110, 97, 109, 101, 37, 32, 72, 105, 32, 10, 32, 109, 115, 103, 32, 37, 117, 115, 101, 114, 110, 97, 109, 101, 37, 32, 72, 105, 32, 10, 32, 109, 115, 103, 32, 37, 117, 115, 101, 114, 110, 97, 109, 101, 37, 32, 72, 105, 32, 10, 32, 109, 115, 103, 32, 37, 117, 115, 101, 114, 110, 97, 109, 101, 37, 32, 72, 105, 32, 10, 32, 109, 115, 103, 32, 37, 117, 115, 101, 114, 110, 97, 109, 101, 37, 32, 72, 105, 32, 10, 32, 109, 115, 103, 32, 37, 117, 115, 101, 114, 110, 97, 109, 101, 37, 32, 72, 105, 32, 32, 32, 109, 115, 103, 32, 37, 117, 115, 101, 114, 110, 97, 109, 101, 37, 32, 72, 105, 32, 32, 32, 109, 115, 103, 32, 37, 117, 115, 101, 114, 110, 97, 109, 101, 37, 32, 72, 105, 32, 32, 32, 109, 115, 103, 32, 37, 117, 115, 101, 114, 110, 97, 109, 101, 37, 32, 72, 105, 32, 10, 32, 109, 115, 103, 32, 37, 117, 115, 101, 114, 110, 97, 109, 101, 37, 32, 72, 105, 32, 10, 32, 109, 115, 103, 32, 37, 117, 115, 101, 114, 110, 97, 109, 101, 37, 32, 72, 105, 32, 10]

바탕화면에 batch파일이 .bat형식으로 만들어져 있고, 실행할 때마다 Hi가 팝업됨. 

'JAVA' 카테고리의 다른 글

221027 Character Stream  (0) 2022.10.27
221027 Buffering  (0) 2022.10.27
221027 FIie과 Stream  (0) 2022.10.27
221026 Properties  (0) 2022.10.26
221026 Map  (0) 2022.10.26