1. 폴더는 복사X -> 원본과 동일 폴더 생성O 2. 파일 복사O -> file.CopyTo() 3. 복사할 폴더는 반드시 자식 폴더를 가지고 있고, 파일도 가지고 있어야함!!
import java.io.*;
class Test24_FileCopyToAnotherFolder
{
//메인메서드
public static void main(String[] args)
{
File dir = new File("D:\\문제2"); //복사 원본 폴더
File toDir = new File("D:\\문제2대상\\"+dir.getName()); //복사 대상 폴더
copyDir(dir, toDir); //복사 실행
}//end main
//디렉토리 복사 메서드
public static void copyDir(File dir, File toDir) {
//복사할 위치에 같은 이름의 폴더 생성
if(!toDir.exists()) { toDir.mkdir(); }
System.out.println(toDir.getAbsolutePath()+"폴더가 생성되었습니다.");
//폴더 검색해서 리스트 생성
File[] fList = dir.listFiles();
//리스트 요소들을 검색
for(File result : fList) { //폴더의 내용이 있을때만 검색
File oldDir = new File(result.getAbsolutePath());
File newDir = new File(toDir.getAbsolutePath()+"\\"+result.getName()); //복사될 요소
if(result.isDirectory()) { //폴더이면
copyDir(oldDir, newDir); //이 이름의 폴더에서 같은 내용 반복
}
else if(result.isFile()) { //파일이면
//복사하기 위해 생성된 폴더로 파일 복사
copyFile(result, newDir);
}
}//end for
}//end copyDir()
//파일 카피 메서드
public static boolean copyFile(File oldFile, File newDir) {
boolean result = false; //완료여부
if( oldFile.exists() ) { //복사 원본 파일 존재시
try
{
FileInputStream fis = new FileInputStream(oldFile.getAbsolutePath());
FileOutputStream fos = new FileOutputStream(newDir.getAbsolutePath());
int input = 0; // 읽어들이는 데이터
while( (input = fis.read()) != -1 ) {
fos.write(input); //읽어들인 값 대상 파일에 쓰기
result = true; //정상복사
}
fis.close(); //사용완료
fos.close(); //사용완료
System.out.println(oldFile.getAbsolutePath()+"파일이 복사되었습니다.");
}
catch (Exception e)
{
result = false;
System.out.println("복사 오류");
}
}else { //복사 원본 파일 존재하지 않으면
System.out.println("잘못된 파일경로입니다.");
}
return result;
}//end copyFile()
}