반응형
1. 설명
이 포스트에서 다루는 예제는 하위 디렉터리를 포함해서 디렉터리를 복사하는 내용의 코드입니다.
Java1.6이하 버젼의 기본 라이브러리에서는 하위디렉터리를 포함해서 복사하는 기능은 별도 제공하지 않으므로
재귀를 사용해서 하위 디렉터리를 포함해서 디렉터리의 전체내용을 복사하도록 구현했습니다.
Java1.7이상의 경우 nio의 기능을 이용하시거나, Apache common의 FileUtil 라이브러리의 기능을 사용하시면
더 간단히 기능을 구현할 수 있습니다.
2. 소스코드
- 메서드
public boolean copys(File origin, File dest, boolean override) throws Exception {
if (origin.exists()) {
if (origin.isDirectory()) {
if ( !makeDir(dest.getAbsolutePath())) {
throw new Exception("Caused by makeDir="+dest.getAbsolutePath());
}
for (File f : origin.listFiles()) {
if ( !copys(f, new File(dest.getAbsolutePath() + this.pathSeparator + f.getName()), override)) {
throw new Exception("Caused by copys="+dest.getAbsolutePath());
}
}
return true;
} else if (origin.isFile()) {
if (copy(origin, dest, true)) {
return true;
} else {
return false;
}
}
}
return false;
}
※ 흐름
1. 파라미터($1 복사대상 디렉토리, $2 복사결과 디렉토리)를 받아 copys메서드 실행
2. 복사대상 디렉토리 또는 파일이 있는지 확인한다. 없다면 false, 있다면 다음처리로
3. 복사대상 디렉토리의 내용을 확인해서 파일과 디렉토리에 맞게 복사처리
1) 디렉토리라면 :
(1) mkdir -p $1/확인한 디렉토리 $2/확인한 디렉토리의 복사본
(2) 파라미터($1 = $1/확인한 디렉토리 $2 = $2/확인한 디렉토리의 복사본)를 받아 copys()메서드 실행
2) 파일이라면 :
(1) cp $1/확인한 파일.txt $2/확인한 파일의 복사본.txt
4. 처리결과가 성공이면 true, 실패면 false를 리턴
- 메인
public class File_06_CopyRecursively {
public static void main(String[] args) {
try {
for (String str : args ) {
System.out.println("Param : "+str);
}
String origin = args[0];
String dest = args[1];
String separator = args[2];
FileUtil fu = new FileUtil();
fu.setPathSeparator(separator);
System.out.println("Result " +fu.copys(origin, dest, true));
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}
3. 실행결과【Windows(이클립스) / Linux】



4. 전체코드
반응형
'프로그래밍 > Java-자주쓰는예제' 카테고리의 다른 글
| 【Java-파일】파일과 디렉토리에 권한부여하기 (0) | 2021.09.13 |
|---|---|
| 【Java-파일】파일과 디렉토리 권한 확인하기 (0) | 2021.09.12 |
| 【Java-파일】디렉토리생성 (0) | 2021.09.12 |
| 【Java-파일】파일복사 (0) | 2021.09.12 |
| 【Java-파일】파일명 바꾸기 (파일 이동하기) (0) | 2021.09.12 |
댓글