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 |