본문 바로가기

자바 DB 연동/입출력 스트림

BufferedInputStream / BufferedOutputStream

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
// 파일 복사하는 프로그램(test4보다 더 좋음)
public class Test8 {
 public static void main(String[] args) {
  //파일 복사 프로그램
  BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  
  String s1,s2;
  int size=512,len;
  byte[] b=new byte[size];
  
  try {
   System.out.print("원본파일명 ?");
   s1=br.readLine();
   System.out.print("복사할파일명 ?");
   s2=br.readLine();
   
   File f1=new File(s1);
   if(! f1.exists()) {
    System.out.println(s1+"파일이 없사옵니다");
    System.exit(0);
   }
   
   File f2=new File(s2);
   if(f2.exists()){
    System.out.println(s2+"가 있으니까 복사 안합니다~");
    System.exit(0);
   }
   
   FileInputStream fis=new FileInputStream(f1);
   //test4예제 처럼 값을(Sring s1)를 직접넣어도 되고 여기서처럼 직접 경로를(File 객체 f1)집어넣어도 된다.
   FileOutputStream fos=new FileOutputStream(f2);
   
   BufferedInputStream bis=new BufferedInputStream(fis);
   //1바이트씩 읽지 않고 한 번에 많은 데이터를 미리 버퍼에 읽어놓게 된다. 따라서 효율이 좋으며입력 스트림과 같은 메소드를 갖는다.
   BufferedOutputStream bos=new BufferedOutputStream(fos,size);
   
   while((len=bis.read(b))!=-1){
    bos.write(b,0,len);
   }
   bos.flush();
   
   bis.close();
   bos.close();
  }catch(Exception e){
   System.out.println(e.toString());
  }

 }

}