文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java 实现文件复制及文件夹复制

2023-09-26 21:06

关注

在Java中,有多种方法可以实现文件的复制。以下是几种常用的方式:

使用字节流进行复制:

通过FileInputStream和FileOutputStream分别创建源文件和目标文件的输入输出流,然后通过循环读取源文件内容,并将数据写入目标文件中进行复制。

可以使用字节数组作为缓冲区,提高复制效率。

需要手动处理流的打开、关闭和异常处理。

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class ByteStreamCopyExample {    public static void main(String[] args) {        String sourceFilePath = "source.txt";        String destinationFilePath = "destination.txt";        try (FileInputStream fis = new FileInputStream(sourceFilePath);             FileOutputStream fos = new FileOutputStream(destinationFilePath)) {            byte[] buffer = new byte[1024];            int bytesRead;            while ((bytesRead = fis.read(buffer)) != -1) {                fos.write(buffer, 0, bytesRead);            }            System.out.println("文件复制成功!");        } catch (IOException e) {            e.printStackTrace();        }    }}

使用字符流进行复制:

通过FileReader和FileWriter分别创建源文件和目标文件的字符流,然后通过循环读取源文件内容,并将数据写入目标文件中进行复制。

可以使用字符数组作为缓冲区,提高复制效率。

需要手动处理流的打开、关闭和异常处理。

import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class CharacterStreamCopyExample {    public static void main(String[] args) {        String sourceFilePath = "source.txt";        String destinationFilePath = "destination.txt";        try (FileReader fr = new FileReader(sourceFilePath);             FileWriter fw = new FileWriter(destinationFilePath)) {            char[] buffer = new char[1024];            int charsRead;            while ((charsRead = fr.read(buffer)) != -1) {                fw.write(buffer, 0, charsRead);            }            System.out.println("文件复制成功!");        } catch (IOException e) {            e.printStackTrace();        }    }}

使用Files类的copy()方法:

在Java的NIO包中,提供了Files类的静态方法copy(),可以直接将一个文件复制到目标位置。

可以使用StandardCopyOption枚举类指定复制选项,例如REPLACE_EXISTING用于覆盖已存在的目标文件。

相对于字节流和字符流,使用Files.copy()方法更简洁方便。

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class Text6 {    public static void main(String[] args) {        try (FileInputStream fis = new FileInputStream("user.txt");             FileOutputStream fos = new FileOutputStream("user1.txt")) {            fis.transferTo(fos);            System.out.println("文件复制成功!");        } catch (IOException e) {            e.printStackTrace();        }    }}

使用Files类的copy()方法结合通道进行复制:

使用FileChannel来处理源文件和目标文件的通道,通过调用源文件通道的transferTo()或transferFrom()方法,将数据从源文件传输到目标文件。

这种方式可以利用底层操作系统提供的文件复制机制,性能较高。

需要手动处理通道和流的打开、关闭和异常处理。

transferTo(OutputStream out) 此方法是java9 新方法,直接实现复制文件。

import java.io.IOException;import java.nio.channels.FileChannel;import java.nio.file.Path;import java.nio.file.StandardCopyOption;public class ChannelCopyExample {    public static void main(String[] args) {        Path sourceFilePath = Path.of("source.txt");        Path destinationFilePath = Path.of("destination.txt");        try (FileChannel sourceChannel = FileChannel.open(sourceFilePath);             FileChannel destinationChannel = FileChannel.open(destinationFilePath,                     StandardOpenOption.CREATE, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING)) {            destinationChannel.transferFrom(sourceChannel, 0, sourceChannel.size());            System.out.println("文件复制成功!");        } catch (IOException e) {            e.printStackTrace();        }    }}

使用第三方库:

Java中有一些第三方库可以简化文件复制操作,例如 Apache Commons IO 的FileUtils类提供了多个便捷的方法用于复制文件或目录。

import org.apache.commons.io.FileUtils;import java.io.File;import java.io.IOException;public class ApacheCommonsIOCopyExample {    public static void main(String[] args) {        File sourceFile = new File("source.txt");        File destinationFile = new File("destination.txt");        try {            FileUtils.copyFile(sourceFile, destinationFile);            System.out.println("文件复制成功!");        } catch (IOException e) {            e.printStackTrace();        }    }}
目录(文件夹)复制
import java.io.File;import java.io.IOException;import java.nio.file.Files;import java.nio.file.StandardCopyOption;public class Text7 {    public static void main(String[] args) {        File sourceDir = new File("D:\\A---webdate");        File destinationDir = new File("D:\\A---webdate1");        try {            copyDirectory(sourceDir, destinationDir);            System.out.println("目录复制成功!");        } catch (IOException e) {            e.printStackTrace();        }    }//在copyDirectory()方法中,我们首先检查目标目录是否存在,如果不存在,则创建该目录。// 然后遍历源目录下的所有文件和子目录,根据文件类型调用copyDirectory()或copyFile()方法进行复制操作。// 对于子目录,递归调用copyDirectory()方法;对于文件,调用copyFile()方法。    public static void copyDirectory(File sourceDir, File destinationDir) throws IOException {        if (!destinationDir.exists()) {            destinationDir.mkdirs();        }        File[] files = sourceDir.listFiles();        if (files != null) {            for (File file : files) {                File destinationFile = new File(destinationDir, file.getName());                if (file.isDirectory()) {                    copyDirectory(file, destinationFile);                } else {                    copyFile(file, destinationFile);                }            }        }    }//在copyFile()方法中,我们使用Files.copy()方法将源文件的内容复制到目标文件中。    public static void copyFile(File sourceFile, File destinationFile) throws IOException {        Files.copy(sourceFile.toPath(), destinationFile.toPath(), StandardCopyOption.REPLACE_EXISTING);// 这里可以使用你前面提到的复制文件的方法,如 transferTo() 或者使用缓冲区的方式复制    }}

来源地址:https://blog.csdn.net/qq_57570052/article/details/131891213

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯