JAVA/HomeWork

Stream이용한 jpg 파일 복사

lavender1122 2024. 2. 3. 11:49

0.객체 생성

FileInputStream fis = null;
FileOutputStream fos = null;
	try {
		 fis = new FileInputStream("C:\\Users\\PC-15\\Desktop\\High_JAVA\\고급자바과제템플릿\\JavaIO\\파일복사\\Tulips.jpg");
		 fos =new FileOutputStream("C:\\Users\\PC-15\\Desktop\\High_JAVA\\고급자바과제템플릿\\JavaIO\\파일복사\\복사본_Tulips.jpg");
  • fis fos 따로 선언하는 이유 :finally 실행시 fis, fos 변수 사용하기 위해서 null 미리 선언
  • FileInputStream 변수명 =  new FileInputStream("파일경로명+ 파일이름 ");
    -  복사 원하는 파일 경로명 + 파일이름 작성
  • FileOutputStream 변수명 = new FileOutputStream("파일경로명+파일이름");
    - 파일 자동으로 생성됨

1.실행문

//읽은 바이트를 저장할 배열 생성
원본에서 읽은 데이터를 저장할 목적
byte[] data = new byte[1024];
int num = 0; 
while ((num = fis.read(data))!= -1) {
	fos.write(data,0, num);
	}
    //flush() 내부 버퍼 잔류 바이트 출력하고 바이트 비움
	fos.flush();
	System.out.println("복사가 잘 되었습니다.");

 

더보기
byte[] data = new byte[1024];

읽은 바이트를 저장할 배열 생성
원본에서 읽은 데이터를 저장할 목적

1KB  = 1024 byte

num = fis.read(data)

.read(byte[] b) : 입력 스트림으로부터 읽은 바이트들은 매개값으로 주어진 바이트 배열b에 저장

                          실제 읽은 바이트 수 리턴(리턴 타입 :int)

fis.read(data)

→ fis 데이터 값을 data(바이트 배열)에 저장

num = fis.read(data)

 fis.read(data) 값은 num(int 타입) 저장

fos.write(data,0, num);

write(byte[]b,int off, int len) : 매개값으로 주어진 배열 off 부터 len개 의 바이트를 출력

fos.write(data,0, num);

  data(매개값)에서 0부터 num까지의 바이트 출력

 write() 사용안하는 이유 

→ 1024 단위로 반복하다가 마지막에 짜투리가 남으면 짜투리 만큼 출력해야되는데

     1024 그대로 출력하면 출력문이 깨지게 나옴

      

fos.flush();

flush()

: 내부 버퍼 잔류 바이트 출력하고 바이트 비움

write 사용하면 꼭 사용해야함


원본

더보기

 'Tulips.jpg'파일을

'복사본_Tulips.jpg'로 복사하는 프로그램을

작성하시오.

package HomeWork.copy;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class copy {

	public static void main(String[] args) {
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			fis = new FileInputStream("C:\\Users\\PC-15\\Desktop\\High_JAVA\\고급자바과제템플릿\\JavaIO\\파일복사\\Tulips.jpg");
			fos =new FileOutputStream("C:\\Users\\PC-15\\Desktop\\High_JAVA\\고급자바과제템플릿\\JavaIO\\파일복사\\복사본_Tulips.jpg");
			
			byte[] data = new byte[1024];
			int num = 0; 
			while ((num = fis.read(data))!= -1) {
				fos.write(data,0, num);
			}
			fos.flush();
			System.out.println("복사가 잘 되었습니다.");
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				fis.close();
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}