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 중국어 웹사이트의 기타 관련 기사를 참조하세요!