[java] Java에서 한 디렉토리에서 다른 디렉토리로 파일 복사

Java를 사용하여 한 디렉토리에서 다른 디렉토리 (하위 디렉토리)로 파일을 복사하고 싶습니다. 텍스트 파일이있는 디렉토리 dir이 있습니다. dir의 처음 20 개 파일을 반복하고 dir 디렉토리의 다른 디렉토리로 복사하려고합니다.이 디렉토리는 반복 직전에 생성되었습니다. 코드에서review (i 번째 텍스트 파일 또는 리뷰를 나타내는) 합니다 trainingDir. 어떻게해야합니까? 그런 기능이없는 것 같습니다 (또는 찾을 수 없습니다). 감사합니다.

boolean success = false;
File[] reviews = dir.listFiles();
String trainingDir = dir.getAbsolutePath() + "/trainingData";
File trDir = new File(trainingDir);
success = trDir.mkdir();
for(int i = 1; i <= 20; i++) {
    File review = reviews[i];

}



답변

지금은 문제를 해결해야합니다

File source = new File("H:\\work-temp\\file");
File dest = new File("H:\\work-temp\\file2");
try {
    FileUtils.copyDirectory(source, dest);
} catch (IOException e) {
    e.printStackTrace();
}

FileUtilsApache Commons-IO의 클래스버전 1.2부터 사용 가능한 라이브러리의 .

우리가 직접 모든 유틸리티를 작성하는 대신 타사 도구를 사용하는 것이 더 좋습니다. 시간과 기타 귀중한 자원을 절약 할 수 있습니다.


답변

표준 API에는 아직 파일 복사 방법이 없습니다. 옵션은 다음과 같습니다.

  • FileInputStream, FileOutputStream 및 버퍼를 사용하여 바이트를 한 바이트에서 다른 바이트로 복사하거나 더 나은 방법으로 FileChannel.transferTo ()를 사용하여 직접 작성하십시오.
  • 사용자 Apache Commons의 FileUtils
  • Java 7에서 NIO2 대기

답변

자바 7에서이 입니다 자바 파일을 복사 할 수있는 표준 방법 :

Files.copy.

고성능을 위해 O / S 기본 I / O와 통합됩니다.

Java로 파일을 복사하는 표준 간결한 방법 에 대한 A를 참조하십시오 . 사용법에 대한 자세한 설명.


답변

Java 팁의 아래 예 는 다소 간단합니다. 그 후 파일 시스템을 다루는 작업을 훨씬 더 우아하고 우아하게하기 위해 Groovy로 전환했습니다. 그러나 여기에 내가 과거에 사용한 Java 팁이 있습니다. 이를 방지하기 위해 필요한 강력한 예외 처리 기능이 없습니다.

 public void copyDirectory(File sourceLocation , File targetLocation)
    throws IOException {

        if (sourceLocation.isDirectory()) {
            if (!targetLocation.exists()) {
                targetLocation.mkdir();
            }

            String[] children = sourceLocation.list();
            for (int i=0; i<children.length; i++) {
                copyDirectory(new File(sourceLocation, children[i]),
                        new File(targetLocation, children[i]));
            }
        } else {

            InputStream in = new FileInputStream(sourceLocation);
            OutputStream out = new FileOutputStream(targetLocation);

            // Copy the bits from instream to outstream
            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            in.close();
            out.close();
        }
    }


답변

파일을 복사하고 이동하지 않으려면 다음과 같이 코딩하면됩니다.

private static void copyFile(File sourceFile, File destFile)
        throws IOException {
    if (!sourceFile.exists()) {
        return;
    }
    if (!destFile.exists()) {
        destFile.createNewFile();
    }
    FileChannel source = null;
    FileChannel destination = null;
    source = new FileInputStream(sourceFile).getChannel();
    destination = new FileOutputStream(destFile).getChannel();
    if (destination != null && source != null) {
        destination.transferFrom(source, 0, source.size());
    }
    if (source != null) {
        source.close();
    }
    if (destination != null) {
        destination.close();
    }

}


답변

Spring Framework 에는 Apache Commons Lang과 같은 많은 유사한 util 클래스가 있습니다. 그래서org.springframework.util.FileSystemUtils

File src = new File("/home/user/src");
File dest = new File("/home/user/dest");
FileSystemUtils.copyRecursively(src, dest);


답변

아파치 커먼즈 Fileutils 가 편리합니다. 아래 활동을 할 수 있습니다.

  1. 한 디렉토리에서 다른 디렉토리로 파일 복사

    사용하다 copyFileToDirectory(File srcFile, File destDir)

  2. 한 디렉토리에서 다른 디렉토리로 디렉토리 복사

    사용하다 copyDirectory(File srcDir, File destDir)

  3. 한 파일의 내용을 다른 파일로 복사

    사용하다 static void copyFile(File srcFile, File destFile)