文件复制是Java中常见的操作之一,在文件处理中使用最广泛的功能之一。文件复制可以用于将一个文件的内容复制到另一个文件,实现文件备份、文件上传和下载等功能。本文将详细介绍Java实现文件复制的方法。
一、使用IO流实现文件复制
使用IO流是Java中实现文件复制的常用方法,通过输入输出流实现文件之间的复制操作。下面是实现文件复制的示例代码:
import java.io.*; public class FileCopyDemo { public static void main(String[] args) { String source = "C:\\sourceFile.txt"; String target = "C:\\targetFile.txt"; try { InputStream in = new FileInputStream(source); OutputStream out = new FileOutputStream(target); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); } catch (IOException e) { e.printStackTrace(); } } }
上述代码中,先定义了源文件和目标文件的路径。在文件输入流和输出流中使用了try-catch语句块处理了文件读写时可能出现的异常。读写过程中定义了一个缓存字节数组,每次读取一个缓存区大小的数据,如果数据长度不为0就将数据写入到目标文件,直到数据全部写完,最后关闭文件输入和输出流。
二、使用NIO实现文件复制
NIO是Java中新的I/O API,它提供了可高度可扩展的、高性能的I/O操作方式。NIO中的通道(channel)概念是对传统IO流的一种改进,在文件读写时可以减少系统调用次数,提高文件读写效率。下面是实现文件复制的NIO示例代码。
import java.io.*; import java.nio.*; import java.nio.channels.*; public class FileCopyDemo { public static void main(String[] args) { String source = "C:\\sourceFile.txt"; String target = "C:\\targetFile.txt"; try { FileInputStream fin = new FileInputStream(source); FileOutputStream fout = new FileOutputStream(target); FileChannel inChannel = fin.getChannel(); FileChannel outChannel = fout.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(1024); while (inChannel.read(buffer) != -1) { buffer.flip(); outChannel.write(buffer); buffer.clear(); } inChannel.close(); outChannel.close(); fin.close(); fout.close(); } catch (IOException e) { e.printStackTrace(); } } }
上述代码中,定义了源文件和目标文件的路径,在读写时创建了文件输入流和输出流,定义了输入和输出的通道,创建一个缓存区Bytebuffer,每次读取一个缓存区大小的数据,如果数据长度不为0就将数据写入到目标文件,直到数据全部写完,最后关闭通道和文件输入输出流。
三、使用Java7中的Files.copy()方法实现文件复制
Java7中增加了Files.copy()方法,可以直接复制文件,使用这种方法可以大大简化文件复制的代码。下面是实现文件复制的示例代码:
import java.nio.file.*; public class FileCopyDemo { public static void main(String[] args) { String source = "C:\\sourceFile.txt"; String target = "C:\\targetFile.txt"; try { Path sourcePath = Paths.get(source); Path targetPath = Paths.get(target); Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { e.printStackTrace(); } } }
上述代码中,使用Java7中的Path和Files类,定义了源文件和目标文件的路径,调用Files.copy()方法来将源文件复制到目标文件。其中,StandardCopyOption.REPLACE_EXISTING选项表示如果目标文件存在将覆盖。
总结
本文详细介绍了Java文件复制的三种不同方法,从代码实现的角度阐述了使用IO流、NIO和Java7的Files.copy()方法分别实现文件复制的方式。在实际开发中,可以根据需要和性能要求选择不同的文件复制方法。