yoni

[22][IO] Text 파일 복사, Image(Binary 파일) 파일 복사 본문

java of educational by contents

[22][IO] Text 파일 복사, Image(Binary 파일) 파일 복사

yoni-1117 2018. 12. 8. 16:42
[01] Text 파일 복사

   - 견본 이미지 1장, 텍스트 파일 1개를 준비합니다. 
   - 폴더를 생성 후 txt 와 jpg 파일을 복사해보세요.

1) 파일 읽기
    - 기초 코드
      File file = new File("C:/201612_java/data.txt"); // 파일 객체

      FileReader reader = null;    // Call By Reference, 파일 읽기
      BufferedReader br = null;   // 메모리에 읽은 파일 저장

      reader = new FileReader(file);
      br = new BufferedReader(reader); 
 
      .....
      String line = br.readLine(); // 메모리에서 한라인씩 읽기
      .....

      br.close();
      reader.close();
 
    - 코드 결합:
      File file = new File("C:/201612_java/data.txt"); // 파일 객체
      BufferedReader br = new BufferedReader(new FileReader(file));
      br.close();

 

2) 파일 쓰기
    - FileWriter(파일명, 추가 여부): 파일이 없으면 파일을 자동으로 생성,
                                            폴더는 생성하지 않습니다.
      . false: 기존 내용을 전부 삭제 후 새로운 내용으로 변경합니다.
      . true: 기존 내용에 새로운 내용을 이어서 뒤쪽에 추가합니다.   

   - PrintWriter 출력 메소드
      . pw.print(""): 파일 기록후 라인 변경 안함. 
      . pw.println(""): 파일 기록후 라인 변경함. 
 
   - 기초 코드
      File file = new File("C:/201612_java/data_2016.txt"); // 파일 객체

      FileWriter fw = null;      // true: 추가 모드, 파일에 기록
      PrintWriter pw = null;   // 메모리에 기록
    
      fw = new FileWriter(file, true);
      pw = new PrintWriter(fw);  

      ..... 
      pw.flush();      // 파일에 기록

      pw.close();
      fw.close();
 


    - 코드 결합
      File file = new File("C:/201610_java/data_2016.txt"); // 파일 객체
      PrintWriter pw = new PrintWriter(new FileWriter(file, true));

    - java.io.FileNotFoundException: 폴더나 파일이 없거나 틀린 경우


1. Text 파일 준비

▷ C:/작업 기준 폴더/io/news.txt
-----------------------------------------------------------------------------------

 
19호 태풍 솔릭 발생.."일본 방향이라 폭염 영향 못줄듯"
-----------------------------------------------------------------
(서울=뉴스1) 황덕현 기자 = 제19호 태풍 솔릭(Soulic)이 16일 발생했으나
현재 일본 내륙을 향하고 있어 국내 영향은 없거나 미미할 전망이다.
 
열대저압부가 발전한 태풍 솔릭은 이날 오전 9시 현재 미국령 괌 북서쪽 약 260㎞ 부근 해상에서 발생했다.
현재 솔릭은 북북서쪽을 향해 시속 38㎞의 비교적 빠른 속도로 이동 중이다. 
중심기압은 998hpa(헥토파스칼)이고 강풍반경은 200㎞로 강도가 약한 소형 태풍에 해당한다.
 
기상청은 이 태풍이 21일 오전 중 일본 가고시마 동남동쪽 약 430㎞ 인근 해상에 도달할 것으로 봤다. 
기상청 국가태풍센터 관계자는 "앞으로 태풍이 5일 동안 이동할 경로를 확정적으로 예측할 수는 없지만
현재 일본 내륙에 도달할 것으로 보여 한반도 폭염에 영향을 미칠 가능성은 낮은 상황"이라고 말했다.
 
솔릭은 오세아니아 미크로네시아연방에서 제출한 태풍 이름으로 전설 속 족장의 이름이다.
 
 
-----------------------------------------------------------------------------------
 

   
2. Text 파일 복사
 
▷ oop3.TextCopy.java 
-----------------------------------------------------------------------------------

package oop3;
 
import java.io.BufferedReader; // 메모리 입출력
import java.io.File;                  // 파일 입출력 지원
import java.io.FileNotFoundException; // 파일 발견이 안되는 경우 예외
import java.io.FileReader;        // 파일 읽기 
import java.io.FileWriter;         // 파일 쓰기
import java.io.IOException;      // 파일 읽기/쓰기 예외
import java.io.PrintWriter;       // FileWrite를 사용하기 편리하게 지원
 
public class TextCopy {
 
  public static void main(String[] args) {
    File file = new File("C:/201812_java/io/news.txt");
    File file_copyed = new File("C:/201812_java/io/news.txt.bak");
    
    // File -> FileReader -> BufferedReader
    FileReader reader = null;   // 파일 읽기
    BufferedReader br = null; // 읽은 내용을 메모리에 저장
 
    // PrintWriter -> FileWriter -> File
    FileWriter writer = null;    // 파일에 기록
    PrintWriter pw = null;      // 메모리에 기록
    
    try {
      reader = new FileReader(file);       // Call By Reference
      br = new BufferedReader(reader); // Call By Reference
      
      writer = new FileWriter(file_copyed, true); // true: 추가, false: 새로 기록
      pw = new PrintWriter(writer);
      
      while(true) {
        String line = br.readLine(); // 하나의 라인을 파일에서 읽음.
        if (line == null) { // 파일 끝인지 검사
          break;
        } else {
          System.out.println(line);
          pw.println(line);
        }
      }
      
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try { pw.close(); } catch (Exception e) {  }
      try { writer.close(); } catch (Exception e) { }
      try { br.close(); } catch (Exception e) { }
      try { reader.close(); } catch (Exception e) { }
    }
  }
 
}
 
-----------------------------------------------------------------------------------
 
  
 

[02] Image(Binary 파일)/영화 파일 복사

[실행 화면]

####################  ← 20개씩 출력
####################
####################
########
sw09.jpg 파일 복사 완료
 


▷ oop3.ImageCopy.java 

-----------------------------------------------------------------------------------
package oop3;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class ImageCopy {
 
  public static void main(String[] args) {
    FileInputStream fis = null;
    FileOutputStream fos = null;
    
    try {


      fis = new FileInputStream("C:/201812_java/swiss/sw09.jpg");
      fos = new FileOutputStream("C:/201812_java/io/sw09.jpg");
 
      byte[] buffer = new byte[4096]; // 4KB, 코드로 변환된 문자를 저장할 공간
      int len = 0;  // 읽은 바이트수
      int readCount = 0; // 읽은 횟수
 
      while(true){
        len = fis.read(buffer); //읽을파일경로.읽는다(원하는 바이트 수로)
        
        if(len == -1){
          break;
        } else {
          fos.write(buffer);// 내용, 기록할 내용의 시작위치, 기록할 내용의 끝위치 //쓸위치.쓴다(원하는 바이트수로)
          readCount++;
          System.out.print("#");
          
          if(readCount % 20 == 0){
            System.out.println();//줄바꿈
          }
        }
      }
      
      
      File file = new File("C:/201810_java/io/sw08.jpg");
      if (file.exists()) {
        System.out.println();
        System.out.println(file.getName() + " 파일 복사 완료");
      }
      
    
      
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try { fis.close(); } catch (IOException e) { }
      try { fos.close(); } catch (IOException e) { }
    }
    
  }
 
}
 
 
-----------------------------------------------------------------------------------
 
 
 
[과제] 참고 내용을 바탕으로 Console에서 파일을 전달받아 복사하는 프로그램을 제작하세요.

[실행 화면]

/ws_java/oop/bin>java oop3.ImageCopy2 sw10.jpg sw10.jpg  ← 원본 파일명, 저장될 파일명
###################
###################
############
sw10.jpg 파일 복사 완료
 
/ws_java/oop/bin>java oop3.ImageCopy2 sw11.jpg sw11.jpg
###################
###################
###################
###################
###################
###################
###################
###
sw11.jpg 파일 복사 완료
 
▷ oop3.ImageCopy2.java 
-----------------------------------------------------------------------------------

package oop3;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class ImageCopy2 {
 
  public static void main(String[] args) {
    FileInputStream fis = null;
    FileOutputStream fos = null;
    
    try {
      fis = new FileInputStream("C:/201812_java/swiss/" + args[0]);
      fos = new FileOutputStream("C:/201812_java/io/" + args[1]);
 
      byte[] buffer = new byte[4096]; // 4KB, 코드로 변환된 문자를 저장할 공간
      int len = 0;  // 읽은 바이트수
      int readCount = 0; // 읽은 횟수
 
      while(true){
        len = fis.read(buffer); //읽을파일경로.읽는다(원하는 바이트 수로)
        
        if(len == -1){
          break;
        } else {
          fos.write(buffer);// 내용, 기록할 내용의 시작위치, 기록할 내용의 끝위치 //쓸위치.쓴다(원하는 바이트수로)
          readCount++;
          System.out.print("#");
          
          if(readCount % 20 == 0){
            System.out.println();//줄바꿈
          }
        }
      }
      
      
      File file = new File("C:/201810_java/io/" + args[0]);
      if (file.exists()) {
        System.out.println();
        System.out.println(file.getName() + " 파일 복사 완료");
      }
      
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try {
        fis.close();
        fos.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    
  }
 
}
 
   
---------------------------------------------------------------------------------


Comments