Java复制文件主要是File工具类中
listFiles()
方法先列出文件夹中的文件, 然后使用BufferedInputStream
缓冲输入流接收要复制的文件, 再用BufferedOutputStream
缓冲输出流的write()
方法写入文件
先新建一个复制文件类, 这边使用递归的方法来复制文件
复制文件夹:
/*** 复制文件夹* @param oldDir 原来的目录* @param newDir 复制到哪个目录*/public static void copyDir(String oldDir, String newDir) {File srcDir = new File(oldDir);// 判断文件是否不存在或是否不是文件夹if (!srcDir.exists() || !srcDir.isDirectory()) {throw new IllegalArgumentException("参数错误");}File destDir = new File(newDir);if (!destDir.exists()) {// 不存在就创建目录if(destDir.mkdirs()){// 列出目录中的文件File[] files = srcDir.listFiles();for (File f : files) {// 是文件就调用复制文件方法 是目录就继续调用复制目录方法if (f.isFile()) {copyFile(f, new File(newDir, f.getName()));} else if (f.isDirectory()) {copyDir(oldDir + File.separator + f.getName(),newDir + File.separator + f.getName());}}}}}
复制文件:
/*** 复制文件* @param oldDir 原来的文件* @param newDir 复制到的文件*/public static void copyFile(File oldDir, File newDir) {BufferedInputStream bufferedInputStream = null;BufferedOutputStream bufferedOutputStream = null;byte[] b = new byte[1024];try {// 将要复制文件输入到缓冲输入流bufferedInputStream = new BufferedInputStream(new FileInputStream(oldDir));// 将复制的文件定义为缓冲输出流bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(newDir));// 定义字节数int len;while ((len = bufferedInputStream.read(b)) > -1) {// 写入文件bufferedOutputStream.write(b, 0, len);}//刷新此缓冲输出流bufferedOutputStream.flush();} catch (IOException e) {e.printStackTrace();} finally {if (bufferedInputStream != null) {try {// 关闭流bufferedInputStream.close();} catch (IOException e) {e.printStackTrace();}}if (bufferedOutputStream != null) {try {bufferedOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}}
下面来测试一下复制E:/test的文件夹内容
public static void main(String[] args) {String oldDir = "E:/test";String newDir = "E:/testCopy";copyDir(oldDir, newDir);
}
执行之后可以看到,成功将test的文件复制到了testCopy文件夹中
至此,Java实现复制文件就完成了