> Java > Java베이스 > Java에서 파일을 복사하는 방법은 무엇입니까?

Java에서 파일을 복사하는 방법은 무엇입니까?

풀어 주다: 2019-12-03 13:35:39
원래의
8831명이 탐색했습니다.

Java에서 파일을 복사하는 방법은 무엇입니까?

Java에서 파일을 복사하는 방법: (권장: java 비디오 튜토리얼)

1. FileStreams를 사용하여 복사

이것은 한 파일의 내용을 다른 파일로 복사하는 가장 고전적인 방법입니다. 가운데. FileInputStream을 사용하여 파일 A의 바이트를 읽고 FileOutputStream을 사용하여 파일 B에 씁니다. 첫 번째 방법에 대한 코드는 다음과 같습니다.

private static void copyFileUsingFileStreams(File source, File dest)
        throws IOException {    
    InputStream input = null;    
    OutputStream output = null;    
    try {
           input = new FileInputStream(source);
           output = new FileOutputStream(dest);        
           byte[] buf = new byte[1024];        
           int bytesRead;        
           while ((bytesRead = input.read(buf)) != -1) {
               output.write(buf, 0, bytesRead);
           }
    } finally {
        input.close();
        output.close();
    }
}
로그인 후 복사

보시다시피 try 데이터에 대해 여러 읽기 및 쓰기 작업을 수행하므로 이는 비효율적이어야 합니다. 다음 방법에서는 새로운 방식을 살펴보겠습니다.

2. FileChannel을 사용하여 복사

Java NIO에는 문서에 따르면 파일 스트림 복사보다 빠른 transferFrom 메서드가 포함되어 있습니다. 두 번째 방법에 대한 코드는 다음과 같습니다.

private static void copyFileUsingFileChannels(File source, File dest) throws IOException {    
        FileChannel inputChannel = null;    
        FileChannel outputChannel = null;    
    try {
        inputChannel = new FileInputStream(source).getChannel();
        outputChannel = new FileOutputStream(dest).getChannel();
        outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
    } finally {
        inputChannel.close();
        outputChannel.close();
    }
}
로그인 후 복사

3. Commons IO를 사용하여 복사

Apache Commons IO는 FileUtils 클래스에서 파일을 다른 위치로 복사하는 데 사용할 수 있는 파일 복사 방법을 제공합니다. 프로젝트에서 이미 사용하고 있는 Apache Commons FileUtils 클래스를 사용하는 것은 매우 편리합니다. 기본적으로 이 클래스는 내부적으로 Java NIO FileChannel을 사용합니다. 세 번째 방법의 코드는 다음과 같습니다.

 private static void copyFileUsingApacheCommonsIO(File source, File dest)
         throws IOException {
     FileUtils.copyFile(source, dest);
 }
로그인 후 복사

이 방법의 핵심 코드는 다음과 같습니다.

private static void doCopyFile(File srcFile, File destFile, boolean preserveFileDate) throws IOException {
        if (destFile.exists() && destFile.isDirectory()) {
            throw new IOException("Destination '" + destFile + "' exists but is a directory");
        }

        FileInputStream fis = null;
        FileOutputStream fos = null;
        FileChannel input = null;
        FileChannel output = null;
        try {
            fis = new FileInputStream(srcFile);
            fos = new FileOutputStream(destFile);
            input  = fis.getChannel();
            output = fos.getChannel();
            long size = input.size();
            long pos = 0;
            long count = 0;
            while (pos < size) {
                count = size - pos > FILE_COPY_BUFFER_SIZE ? FILE_COPY_BUFFER_SIZE : size - pos;
                pos += output.transferFrom(input, pos, count);
            }
        } finally {
            IOUtils.closeQuietly(output);
            IOUtils.closeQuietly(fos);
            IOUtils.closeQuietly(input);
            IOUtils.closeQuietly(fis);
        }

        if (srcFile.length() != destFile.length()) {
            throw new IOException("Failed to copy full contents from '" +
                    srcFile + "' to '" + destFile + "'");
        }
        if (preserveFileDate) {
            destFile.setLastModified(srcFile.lastModified());
        }
    }
로그인 후 복사

Apache Commons IO를 사용하여 파일을 복사하는 원리는 위에서 언급한 두 번째 방법인 것을 알 수 있습니다. copy

IV. Java7의 Files 클래스를 사용하여 복사

Java 7에 대한 경험이 있다면 Files 클래스의 복사 메소드를 사용하여 한 파일에서 다른 파일로 복사할 수 있다는 것을 알 수 있습니다. 네 번째 메소드의 코드는 다음과 같습니다.

 private static void copyFileUsingJava7Files(File source, File dest)
         throws IOException {    
         Files.copy(source.toPath(), dest.toPath());
}
로그인 후 복사

더 많은 Java 지식을 알고 싶다면 java 기본 튜토리얼 칼럼을 주목해주세요.

위 내용은 Java에서 파일을 복사하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿