본문 바로가기

프로그램/java

charset 선택하여 파일 저장하기

반응형

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Properties;


public class CopyFile {
 public static void main( String[] args ) {
  Properties prop = new Properties();
 
  try {
   // properties 파일 읽기
   prop.load( new FileInputStream("." + File.separator + "file.properties") );
   
   System.out.println( prop.getProperty("fileurl1") );
   
   String srcUrl   = "d:" + File.separator + "경로" + File.separator + "workspace";
   String targetUrl  = "d:" + File.separator + "경로" + File.separator + "workspace";
   
   for( int i=0; i < prop.size(); i++) {
    File srcFile = new File( srcUrl + prop.getProperty( "fileurl" + (i + 1) ) );
   
    // bufferedreader 을 이용하려고 햇으나 charset 문제 떄문에 InputStreamReader 를 사용함
    // 근데 의문이 드는게 bufferedReader 에 reader 를 넣는데 여기에 inputStreamReader 를 넣으면 될꺼 같은데 안되는게 신기함.
//    BufferedReader br = new BufferedReader( new FileReader( srcFile ) );
    InputStreamReader br = new InputStreamReader( new FileInputStream(srcFile), "utf-8" );

    // 여기 역시 bufferedwriter 를 outputstreamwriter 로 변경
    // stream 에 대한 공부 다시 할 필요가 있음.ㅠㅠ
//    BufferedWriter bw = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( "c:/test" + i + ".txt" ), "utf-8" ) );
    OutputStreamWriter bw = new OutputStreamWriter( new FileOutputStream( targetUrl + prop.getProperty( "fileurl" + (i + 1) ) ), "utf-8" );
   
    System.out.println("bw.getEncoding() : " + bw.getEncoding());    // encoding 확인
    System.out.println("system : " + System.getProperty("file.encoding"));  // 현재 system encoding 확인
   
    char[] buf = new char[512];
    int cnt;
   
    while( (cnt = br.read(buf)) != -1 ) {
     bw.write(buf, 0, cnt);
     bw.flush();
    }
   
    bw.close();
    br.close();
   }
   
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}