Java

파일 Copy (바이트기반 입/출력)

H_u 2024. 5. 16. 12:08
728x90
반응형
SMALL
💡 학습 목표 바이트 단위에 기반스트림 파일 입력,출력 스트림을 함께 사용해 보자.

 

 

시나리오 코드 1 - 기반 스트림인 파일 입력,출력 스트림을 사용

 

package IO.file.ch03;

import java.io.FileInputStream;

import java.io.FileOutputStream;

 

public class FileCopy {

 

public static void main(String[] args) {

 

// 스트림은 기본적으로 단방향 이다.

// 입력 스트림, 출력 스트림 두개가 필요 하다.

 

// 파일 경로 (복사할 대상)

String sourceFilePath = "C:\\a.zip";

// 목적지 파일

String destinationFilePath = "copy1.zip";

 

// 소요시간 확인

long startTime = System.nanoTime();

 

try (FileInputStream in = new FileInputStream(sourceFilePath);

FileOutputStream out = new FileOutputStream(destinationFilePath)) {

 

int data;

while( ( data = in.read() ) != -1 ) {

// 파일에 출력

out.write(data);

}

 

System.out.println("입력스트림 --> 출력스트림 --> 입력 --> 출력에 반복 완료");

} catch (Exception e) {

// TODO: handle exception

}

 

long endTime = System.nanoTime();

long duration = endTime - startTime;

 

System.out.println("복사의 소요시간은 : " + duration);

 

// 소요 시간을 초 단위로 변환 --> 포맷팅

double seconds = duration / 1_000_000_000.0;

// String 클래스에 format 메서드 사용해보기

String resultFormat = String.format("소요시간은 : %.6f초 입니다.", seconds);

// % 는 포맷 지정자의 시작

// f 지정자는 float, double 유형의 변수를 인자로 받아 처리 하겠다.

System.out.println(resultFormat);

}

}

 

 

시나리오 코드 2 - 보조 버퍼스트림 사용

package IO.file.ch03;

 

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;

 

public class BufferedFileCopy {

 

public static void main(String[] args) {

// (바이트 기반 스트림)

// 기반 스트림 + 보조스트림을 활용 해서

// 파일 복사 기능을 만들고

// 소요 시간을 측정하시오

 

// 파일경로

String sourceFilePath = "C:\\a.zip";

// 복사한파일 이름 및 경로

String destinetionFilePath = "copy2.zip";

 

long startTime = System.nanoTime();

 

try (FileInputStream in = new FileInputStream(sourceFilePath);

BufferedInputStream bosIn = new BufferedInputStream(in);

FileOutputStream out = new FileOutputStream(destinetionFilePath);

BufferedOutputStream bosOut = new BufferedOutputStream(out);

) {

int data;

while ( (data = bosIn.read() ) != -1 ) {

bosOut.write(data);

}

 

 

} catch (Exception e) {

e.printStackTrace();

}

 

long endTime = System.nanoTime();

long duration = endTime - startTime;

System.out.println("소요시간" + duration);

double seconds = duration / 1_100_100_100.0;

String resultFormat = String.format("소요 시간은 : %.6f초 입니다.", seconds);

System.out.println(resultFormat);

 

}

 

}

728x90
반응형
SMALL

'Java' 카테고리의 다른 글

파일 입력 스트림(문자 기반 스트림)  (0) 2024.05.31
문자 기반 스트림  (0) 2024.05.17
Inner class(중첩 클래스)  (0) 2024.05.14
표준 입출력이란?  (0) 2024.05.14
자바 I/O 개론  (0) 2024.05.14