반응형
- 파일 스트림들
- 파일 In, Out input 관련 기능을 모아 놓은 Stream 클래스들임
- 당연히 파일을 열고 닫기 떄문에 .close를 해줘야함, 대신 try (){}에서 ()안에 작성하면 try 구문을 나가면 자동으로 닫아 줌
인풋 / 리더기
package Chapter23;
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamTest01 {
public static void main(String[] args) {
try(FileInputStream fis = new FileInputStream("inputText.txt");){
int data;
while ((data = fis.read()) != -1) {
System.out.println((char)data);
}
}
catch (IOException e){
e.printStackTrace();
}
}
}
FileInputStream 클래스 생성 -> Input 해서 해당 클래스로 반환해줌
바이트 단위로 읽어오기 때문에 while 안에서 돌려서 확인해줌
문자는 아스키 코드 기준으로 바이트 화 해서 쓰기 때문에 한글을 쓰면 깨짐 -> 아스키에 없으니깐...
package Chapter23;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class InputStreamReaderTest {
public static void main(String[] args) {
try (InputStreamReader isr = new InputStreamReader(new FileInputStream("reader.txt"))){
int i;
while ((i=isr.read())!=-1){
System.out.print((char)i);
}
System.out.println();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
InputStreamReader 클래스를 이용해서 파일 인풋 후 -> 리더로 사용 가능함
package Chapter23;
import java.io.FileReader;
import java.io.IOException;
public class FileInputStreamTest02 {
public static void main(String[] args) {
try(FileReader fr = new FileReader("inputText.txt")){
int data;
while ((data = fr.read()) != -1) {
System.out.print((char)data);
}
}
catch (IOException e){
e.printStackTrace();
}
}
}
FileReader 클래스는 한글을 가져올 수 있음
아웃풋
package Chapter23;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStream02 {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("output2.txt");){
byte[] buf = new byte[26];
byte data = 65;
for (int i = 0; i < buf.length; i++) {
buf[i] = data;
data++;
}
fos.write(buf);
}
catch (IOException e){
e.printStackTrace();
}
System.out.println("출력 완료");
}
}
FileOutputStream 클래스는 아웃풋 해주는 클래스
package Chapter23;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriteTest {
public static void main(String[] args) {
try (FileWriter fw = new FileWriter("writer.txt")) {
fw.write('A');
char[] buf = {'B', 'C', 'D', 'E', 'F', 'G'};
fw.write(buf);
fw.write("안녕하세요. 잘 써지나요?");
fw.write(buf, 2, 4);
fw.write("65");
}
catch (IOException e) {
e.printStackTrace();
}
System.out.println("파일 생성 완료");
}
}
FileWriter 클래스도 아웃풋 해주는 클래스, 대신 보다 유연한 형태로 저장이 가능함
버퍼 사용법
package Chapter23;
import java.io.*;
public class BufferedFileCopyTest {
public static void main(String[] args) {
long miliseconds = 0;
try(FileInputStream fis = new FileInputStream("a.zip");
FileOutputStream fos = new FileOutputStream("copy.zip");
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos)){
miliseconds = System.currentTimeMillis();
int i;
while ((i = bis.read()) != -1) {
bos.write(i);
}
bos.flush();
miliseconds = System.currentTimeMillis() - miliseconds;
}
catch (IOException e){
e.printStackTrace();
}
System.out.println(String.format("파일 복사하는데 : %d miliseconds", miliseconds));
}
}
BufferedInputStream과 BufferedOutputStream 클래스를 사용해서 무거운 파일을 사용할 때 버퍼된 값을 활용해서
시간을 단축 시킬수 도 있음. 버퍼클래스를 read 및 write를 해줄 수 있음
반응형
'Java' 카테고리의 다른 글
250212_자바 람다식, 스트림, 예외처리 (1) | 2025.02.12 |
---|---|
250211_Java 중첩 클래스 (0) | 2025.02.11 |