1. 소개
이 짧은 예제에서는 모든 파일과 하위 디렉토리를 포함하여 Java에서 디렉토리를 복사하는 방법을 알아 봅니다. 이는 핵심 Java 기능 또는 타사 라이브러리를 사용하여 수행 할 수 있습니다.
2. java.nio API 사용
Java NIO 는 Java 1.4부터 사용할 수 있습니다. Java 7은 기호 링크 처리, 파일 속성 액세스에 대한 더 나은 지원과 같은 많은 유용한 기능을 제공하는 NIO 2 를 도입했습니다. 또한 Path , Paths 및 Files 와 같은 클래스를 제공 하여 파일 시스템을 훨씬 쉽게 조작 할 수 있습니다.
이 접근 방식을 시연 해 보겠습니다.
public static void copyDirectory(String sourceDirectoryLocation, String destinationDirectoryLocation)
throws IOException {
Files.walk(Paths.get(sourceDirectoryLocation))
.forEach(source -> {
Path destination = Paths.get(destinationDirectoryLocation, source.toString()
.substring(sourceDirectoryLocation.length()));
try {
Files.copy(source, destination);
} catch (IOException e) {
e.printStackTrace();
}
});
}
이 예제에서 우리는 Files.walk ()를 사용하여 주어진 소스 디렉토리에 뿌리를 둔 파일 트리를 살펴보고 소스 디렉토리 에서 찾은 각 파일 또는 디렉토리에 대해 Files.copy () 를 호출했습니다 .
3. java.io API 사용
Java 7은 새롭고 편리한 기능을 많이 도입했기 때문에 파일 시스템 관리 관점에서 전환점이되었습니다.
그러나 이전 Java 버전과의 호환성을 유지하려면 재귀 및 java.io.File 기능을 사용하여 디렉토리 를 복사 할 수 있습니다 .
private static void copyDirectory(File sourceDirectory, File destinationDirectory) throws IOException {
if (!destinationDirectory.exists()) {
destinationDirectory.mkdir();
}
for (String f : sourceDirectory.list()) {
copyDirectoryCompatibityMode(new File(sourceDirectory, f), new File(destinationDirectory, f));
}
}
이 경우 소스 디렉터리 트리의 모든 디렉터리에 대해 대상 디렉터리에 디렉터리를 만듭니다 . 그런 다음 copyDirectoryCompatibityMode () 메서드를 호출합니다 .
public static void copyDirectoryCompatibityMode(File source, File destination) throws IOException {
if (source.isDirectory()) {
copyDirectory(source, destination);
} else {
copyFile(source, destination);
}
}
또한 FileInputStream 및 FileOutputStream을 사용하여 파일을 복사하는 방법을 살펴 보겠습니다 .
private static void copyFile(File sourceFile, File destinationFile)
throws IOException {
try (InputStream in = new FileInputStream(sourceFile);
OutputStream out = new FileOutputStream(destinationFile)) {
byte[] buf = new byte[1024];
int length;
while ((length = in.read(buf)) > 0) {
out.write(buf, 0, length);
}
}
}
4. Apache Commons IO 사용
Apache Commons IO 에는 유틸리티 클래스, 파일 필터 및 파일 비교기와 같은 유용한 기능이 많이 있습니다. 여기서는 읽기, 이동, 복사와 같은 쉬운 파일 및 디렉토리 조작 방법을 제공 하는 FileUtils 를 사용합니다.
commons-io 를 pom.xml 파일에 추가해 보겠습니다 .
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
마지막으로 다음 접근 방식을 사용하여 디렉토리를 복사 해 보겠습니다.
public static void copyDirectory(String sourceDirectoryLocation, String destinationDirectoryLocation) throws IOException {
File sourceDirectory = new File(sourceDirectoryLocation);
File destinationDirectory = new File(destinationDirectoryLocation);
FileUtils.copyDirectory(sourceDirectory, destinationDirectory);
}
이전 예제에서 볼 수 있듯이 Apache Commons IO는 FileUtils.copyDirectory () 메서드 를 호출하기 만하면 되기 때문에 모든 작업을 훨씬 쉽게 만듭니다 .
5. 결론
이 기사에서는 Java에서 디렉토리를 복사하는 방법을 설명했습니다. 전체 코드 샘플은 GitHub에서 사용할 수 있습니다 .