//http://hyeonstorage.tistory.com/236 요기 참고함 !
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileInOut {
public static void main(String[] args) throws Exception {
FileInputStream fis = null;
FileOutputStream fos = null;
File file = new File("C:/엑셀파일.xlsx");
try {
fis = new FileInputStream(file);
fos = new FileOutputStream("C:/" + file.getName()+"_1.xlsx");
/* 방법 1.
* 파일을 읽을 때 1바이트씩 읽고 쓰기를 반복하여 비효율적
*
int i;
while((i=fis.read())!= -1){
fos.write(i);
}
*/
/* 방법 2.
* 한번에 읽어서 한번에 write 함으로 방법1 보다는 효율적
*
int size = fis.available();
byte[] buf = new byte[size];
int readSize = fis.read(buf); //the total number of bytes read into the buffer
fos.write(buf, 0, readSize);
*/
/* 방법 3.
* buffer의 size만큼 읽고 쓰기를 반복,
* file의 데이터를 모두 읽어 사용하거나, 용량이 크지 않는 경우는 방법2
* 한번에 메모리에 담아서 처리하기 용량이 크거나 file의 전체 데이터를 사용하지 않는 경우는
* 비효율적일 수 있기 때문에 적정 크기의 버퍼를 잡아서 입출력을 반복함
* 일반적으로 1024, 2048, 4096...
*
* */
byte[] buf = new byte[1024];
int readSize = 0;
while((readSize = fis.read(buf))!=-1){ //file에서 1024만큼 읽는 것을 반복
fos.write(buf, 0, readSize);
}
} catch (Exception e){
e.printStackTrace();
} finally {
if(fis!=null)fis.close();
if(fos!=null)fos.close();
}
}
}
'IT > java' 카테고리의 다른 글
java UUID (0) | 2016.05.30 |
---|---|
파일 입출력 - 입력 (0) | 2016.05.30 |