본문 바로가기
JAVA

[Java] 바이트 배열 데이터 파일 저장하기

by 고체물리학 2021. 11. 3.

이미지나 파일을 바이트 배열로 변경하고 그 바이트 배열을 다시 파일로 저장하는 방법을 정리

 

사용할 클래스

 

FileInputStream: 파일 내용을 바이트 형식을 읽음

FileOutputStream: 파일에 바이트 스트림으로 저장하기 위한 클래스

BufferedInputStream: 바이트 기반의 성능 향상 입력 스트림, 직접적으로 파일을 쓸 수 없음 FIleInputStream 을 사용

BufferedOutputStream: 바이트 기반의 성능 향상 출력 스트림, 데이터를 쌓아두었다가 데이터가 다 차면 파일을 씀

 

1. FileInputStream으로 복사할 파일 내용을 byte 형식으로 읽어온다

"C:\\Users\\Public\\Downloads"

- C:\\Users\\Public\\Downloads에 있는 Test.txt파일을 복사할 것이다

 

Test.txt

- Test.txt 파일에 적힌 내용은 "Test File"

 

FileInputStream fis = new FileInputStream("C:\\Users\\Public\\Downloads\\Test.txt"); // 원본 파일 명
BufferedInputStream bis = new BufferedInputStream(fis);

- 입력스트림으로 저장

 

2. 이제FileOutputStream으로 파일을 쓸 경로를 지정한다

FileOutputStream fos = new FileOutputStream("C:\\Users\\\\Public\\Downloads\\Copy.txt"); // 복사할 파일 명
BufferedOutputStream bos = new BufferedOutputStream(fos);

 

3. BufferInputStream으로 읽어온 data가 없을 때까지 BufferOutputStream에 쓴다 

	 byte[] data = new byte[1204]; //1byte
	 int i = 0;
  
	 StringBuffer buffer = new StringBuffer();
	 while((i= bis.read(data,0,1024))!=-1){
		 bos.write(data);
	 }

4. 전체 코드

 public static void main(String[] args) throws IOException{

	 FileInputStream fis = new FileInputStream("C:\\Users\\Public\\Downloads\\Test.txt"); // 원본 파일 명
	 FileOutputStream fos = new FileOutputStream("C:\\Users\\\\Public\\Downloads\\Copy.txt"); // 복사할 파일 명
	 BufferedInputStream bis = new BufferedInputStream(fis); 
	 BufferedOutputStream bos = new BufferedOutputStream(fos);
  
	 byte[] data = new byte[1204]; //1byte
	 int i = 0;
  
	 StringBuffer buffer = new StringBuffer();
	 while((i= bis.read(data,0,1024))!=-1){
		 bos.write(data);
	 }
	 bis.close();
	 bos.close();

 }

 

5. 결과(Copy.txt이 저장됨)

"C:\\Users\\Public\\Downloads"

 

Copy.txt

 

Byte 배열의 바이너리 데이터를 가지고 있는 경우

 

- FileOutStream의 write 함수를 사용하여 data를 저장하면 된다

 

    public static void SaveFile(String filename,byte[] data){
    	
    	try {
    		int bytesRead;
    		File filePath = new File(경로,filename); // 복사하고 싶은 경로, 저장하고싶은 파일명
    		FileOutputStream fos = new FileOutputStream(filePath); 
    		fos.write(data); //바이너리 데이터 data를 파일에 쓴다
			fos.flush();
    		fos.close();
    	}catch (Exception e) {
			// TODO: handle exception
		}
    }

 

반응형

댓글