IO流篇 -- 基于io流实现文件夹拷贝(拷贝子文件夹及子文件夹内文件)满满的干货

简介: IO流篇 -- 基于io流实现文件夹拷贝(拷贝子文件夹及子文件夹内文件)满满的干货

题目:利用IO流实现文件夹拷贝,需拷贝子文件夹以及子文件夹的文件。

解题思路:利用递归实现文件夹拷贝,一层层往里进,看是否有文件,若有,执行前一遍复制的操作,这样就达到了拷贝文件夹以及子文件夹。

话不多说,上代码:

public class FileCopy {

    public static void main(String[] args) {
        //源文件
        String path = "C:/Users/Desktop/0611";
        //目标地址
        String path2 = "C:/Users/Desktop/0611(复制版)";
        //将目标路径放入File类中
        File f2 = new File(path2);
        //检测文件路径是否存在,若不存在,则创建文件夹,防止文件未找到异常导致程序崩溃
        if (!f2.exists()) {
            //创建文件夹
            f2.mkdirs();
        }
        //调用方法,传入实参,开始拷贝文件夹
        copyFile(path, path2);
    }
    
    /**
     * 拷贝文件,利用递归拷贝子文件夹以及文件
     * @param path1    源文件路径
     * @param path2    目标文件路径
     */
    public static void copyFile(String path1, String path2) {
        File file = new File(path1);
        File[] files = file.listFiles();
        for (File file2 : files) {
            if (file2.isDirectory()) {
                String newPath = path2 + File.separator + file2.getName();
                File f2 = new File(newPath);
                System.out.println(f2.getAbsolutePath());
                f2.mkdirs();
                System.out.println("创建成功~");
                copyFile(file2.getAbsolutePath(), newPath);
            }
            if (file2.isFile()) {
                try {
                    InputStream is = new FileInputStream(file2.getAbsolutePath());
                    int num = is.available();
                    byte[] bs = new byte[num];
                    OutputStream os = new FileOutputStream(path2 + File.separator + file2.getName());
                    int realLen = is.read(bs, 0, bs.length);
                    os.write(bs, 0, realLen);
                    System.out.println("写入成功~");
                    if (is != null) {
                        is.close();
                    }
                    if (os != null) {
                        os.close();
                    }
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
    
}

如果你觉得这篇文章有用,那就支持一下吧,感谢点赞的老铁😜🤞

相关文章
|
1月前
|
安全 NoSQL Java
一文搞懂网络通信的基石✅IO模型与零拷贝
【10月更文挑战第1天】本文深入探讨了网络通信中的IO模型及其优化方法——零拷贝技术。首先介绍了IO模型的概念及五种常见类型:同步阻塞、同步非阻塞、多路复用、信号驱动和异步IO模型。文章详细分析了每种模型的特点和适用场景,特别是多路复用和异步IO在高并发场景中的优势。接着介绍了零拷贝技术,通过DMA直接进行数据传输,避免了多次CPU拷贝,进一步提升了效率。最后总结了各种模型的优缺点,并提供了相关的代码示例和资源链接。
一文搞懂网络通信的基石✅IO模型与零拷贝
|
1月前
|
搜索推荐 索引
【文件IO】实现:查找文件并删除、文件复制、递归遍历目录查找文件
【文件IO】实现:查找文件并删除、文件复制、递归遍历目录查找文件
34 2
|
1月前
|
编解码 Java 程序员
【文件IO】文件内容操作
【文件IO】文件内容操作
45 2
|
1月前
|
存储 Java API
【文件IO】文件系统操作
【文件IO】文件系统操作
40 1
|
2月前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
1月前
|
存储 Java 程序员
【Java】文件IO
【Java】文件IO
35 0
|
2月前
|
Linux C语言
C语言 文件IO (系统调用)
本文介绍了Linux系统调用中的文件I/O操作,包括文件描述符、`open`、`read`、`write`、`lseek`、`close`、`dup`、`dup2`等函数,以及如何获取文件属性信息(`stat`)、用户信息(`getpwuid`)和组信息(`getgrgid`)。此外还介绍了目录操作函数如`opendir`、`readdir`、`rewinddir`和`closedir`,并提供了相关示例代码。系统调用直接与内核交互,没有缓冲机制,效率相对较低,但实时性更高。
|
3月前
|
存储 监控 Linux
性能分析之从 IO 高定位到具体文件
【8月更文挑战第21天】性能分析之从 IO 高定位到具体文件
41 0
性能分析之从 IO 高定位到具体文件
|
3月前
IO流拷贝文件的几种方式
IO流拷贝文件的几种方式
36 1
WXM
|
3月前
|
存储 缓存 算法
IO/线程的零拷贝
服务器在提供文件传输功能时,传统实现方式是通过读取磁盘文件内容,将其加载到用户空间的缓冲区,再通过网络 API 发送至客户端,这个过程涉及多次上下文切换和内存拷贝,导致性能下降。
WXM
49 12