Programming Language/Java

[JAVA] 텍스트 파일 및 바이너리 파일 복사

BS Kwak 2020. 12. 12. 19:52

bskwak.tistory.com/179

바이트 스트림, 문자스트림, 버퍼 스트림 정의

 

[JAVA] 스트림 - 바이트 스트림, 문자 스트림, 버퍼스트림을 이용한 파일 입출력

Slow but steady wins the race [JAVA] 스트림 - 바이트 스트림, 문자 스트림, 버퍼스트림을 이용한 파일 입출력 본문 Programming Language/Java [JAVA] 스트림 - 바이트 스트림, 문자 스트림, 버퍼스트림을 이용한

bskwak.tistory.com

텍스트 파일 복사

- FileReader와 FileWriter이용

더보기

(코드 알고리즘 )

원본파일 문자 하나씩 읽어서 복사 파일에 하나씩 쓰면 된다 

package streamStudy;
import java.io.*;
public class practice_file8 {
	public static void main(String[] args) {
		File src = new File("c:\\windows\\system.ini"); //원본 file 경로명
		File dest = new File("system.txt");	//복사 file 경로명
		int c;
		try {
			FileReader fr = new FileReader(src);
			FileWriter fw = new FileWriter(dest);
			while((c=fr.read())!=-1) {	//문자 하나 읽고
				fw.write((char)c);	//문자 하나쓰고
			}
			fr.close(); fw.close();
			System.out.println(src.getPath()+"를"+dest.getPath()+" 로 복사");
		}catch (IOException e) {
			System.out.println("파일 복사 오류");
		}
	}
}

 

cf) 파일 클래스

-      파일의 경로명을 다루는 클래스 (java.io.File)

-      파일관리 기능 (이름 변경, 삭제, 디렉터리 생성, 크기, )

-      f.getName() f.getPath() f.getParent() f.listFiles() 등등이 있음

 

바이너리 파일 복사

- 바이트 스트림 이용

package streamStudy;
import java.io.*;
public class practice_file9 {
	public static void main(String[] args) throws IOException{
		File src = new File("test.out");
		File dest = new File("copytest.out");
		int c;
		try {
			FileInputStream fi = new FileInputStream(src);
			FileOutputStream fo = new FileOutputStream(dest);
			while((c=fi.read())!=-1) {
				fo.write((byte)c);
			}
			fi.close(); fo.close();
			System.out.println("복사 성공");
		}catch(IOException e) {
			System.out.println("실패");
		}
	}
}

 

블록 단위로 바이너리 파일 고속 복사

- 10KB 단위로 읽고 쓰도록 하여 고속으로 파일 복사

package streamStudy;
import java.io.*;
public class practice_file10 {
	public static void main(String[] args) {
		File src = new File("C:\\Users\\0214k\\OneDrive\\바탕 화면\\picture.jpg");
		File dest = new File("picture2.jpg");
		try {
			FileInputStream fi = new FileInputStream(src);
			FileOutputStream fo = new FileOutputStream(dest);
			byte[] buf = new byte[1024*10];
			while(true) {
				int n= fi.read(buf);
				fo.write(buf,0,n);	//buf[0]부터 n byte 쓰기
				if(n<buf.length) break;
			}
			fi.close();	fo.close();
			System.out.println("복사 성공");
		}
		catch(IOException e) {
			System.out.println("복사 오류");
		}
	}
}

바이너리 파일이므로 사진도 복사 가능