当前位置: 首页 > news >正文

随机选择文件,向后写入文件内容

文章目录

  • 一、 需求概述
  • 二、Java实现
    • 1、添加依赖
    • 2、源码实现
  • 三、运行结果

一、 需求概述

指定文件目录,搜索某类型文本文件,随机选择几个做内容交换。

思路:

将原始数据看做内齿轮,复制的内容数据看做外齿轮,将外部齿轮顺时针挪一步后写入,便实现了数据的腾挪!
在这里插入图片描述

二、Java实现

1、添加依赖

pom.xml

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-simple</artifactId>
	<version>2.0.16</version>
</dependency>
<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-lang3</artifactId>
	<version>3.5</version>
</dependency>
<dependency>
	<groupId>commons-io</groupId>
	<artifactId>commons-io</artifactId>
	<version>2.15.0</version>
</dependency>
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.18.12</version>
	<scope>provided</scope>
</dependency>
<dependency>
	<groupId>org.junit.jupiter</groupId>
	<artifactId>junit-jupiter-engine</artifactId>
	<version>5.5.2</version>
</dependency>

2、源码实现


import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Objects;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

import lombok.extern.slf4j.Slf4j;

/**
 * 随机选择文件,向后写入文件内容
 */
@Slf4j
public class FileExchange
{
    static String path = System.getenv().get("USERPROFILE") + "\\Pictures\\";
    
    File directory = new File(path);
    
    /**
     * 创建测试文件
     */
    @BeforeAll
    public static void init()
    {
        IntStream.rangeClosed(0, 10).forEach(i -> {
            try
            {
                File file = new File(path + i + ".txt");
                FileUtils.writeStringToFile(file, Objects.toString(i), StandardCharsets.UTF_8);
            }
            catch (IOException e)
            {
                log.error(e.getMessage(), e);
            }
        });
    }
    
    @Test
    public void test()
    {
        List<File> files = FileUtils.listFiles(directory, new String[] {"txt"}, true).stream().collect(Collectors.toList());
        
        // 随机选择多个
        List<File> chooseFiles = new Random().ints(5, 0, files.size())
            .mapToObj(index -> files.get(index))
            .distinct()
            .peek(f -> log.info("{}", f.getAbsolutePath())) // 打印
            .collect(Collectors.toList());
        
        int length = chooseFiles.size();
        if (length > 1)
        {
            List<String> texts = chooseFiles.stream().map(file -> readText(file)).collect(Collectors.toList());
            if (texts.stream().allMatch(text -> StringUtils.isNotBlank(text)))
            {
                AtomicInteger index = new AtomicInteger();
                texts.forEach(text -> {
                    try
                    {
                        File dest = chooseFiles.get(index.incrementAndGet() % length);
                        FileUtils.writeStringToFile(dest, text, StandardCharsets.UTF_8);
                        log.info("{} ===> {}", text, dest.getAbsolutePath());
                    }
                    catch (IOException e)
                    {
                        log.error(e.getMessage(), e);
                    }
                });
            }
        }
    }
    
    /**
     * 读取文件文本内容
     * 
     * @param file
     * @return
     */
    private String readText(File file)
    {
        try
        {
            return FileUtils.readFileToString(file, StandardCharsets.UTF_8);
        }
        catch (IOException e)
        {
            log.error(e.getMessage(), e);
            return null;
        }
    }
}

三、运行结果

2025-03-04 18:44:56.204  INFO 27280 --- [main] c.f.f.FileExchange             : C:\Users\DELL\Pictures\6.txt
2025-03-04 18:44:56.206  INFO 27280 --- [main] c.f.f.FileExchange             : C:\Users\DELL\Pictures\3.txt
2025-03-04 18:44:56.206  INFO 27280 --- [main] c.f.f.FileExchange             : C:\Users\DELL\Pictures\8.txt
2025-03-04 18:44:56.206  INFO 27280 --- [main] c.f.f.FileExchange             : C:\Users\DELL\Pictures\9.txt
2025-03-04 18:44:56.206  INFO 27280 --- [main] c.f.f.FileExchange             : C:\Users\DELL\Pictures\5.txt
2025-03-04 18:44:56.213  INFO 27280 --- [main] c.f.f.FileExchange             : 6 ===> C:\Users\DELL\Pictures\3.txt
2025-03-04 18:44:56.214  INFO 27280 --- [main] c.f.f.FileExchange             : 3 ===> C:\Users\DELL\Pictures\8.txt
2025-03-04 18:44:56.214  INFO 27280 --- [main] c.f.f.FileExchange             : 8 ===> C:\Users\DELL\Pictures\9.txt
2025-03-04 18:44:56.215  INFO 27280 --- [main] c.f.f.FileExchange             : 9 ===> C:\Users\DELL\Pictures\5.txt
2025-03-04 18:44:56.215  INFO 27280 --- [main] c.f.f.FileExchange             : 5 ===> C:\Users\DELL\Pictures\6.txt

相关文章:

  • 04_DeepLearning_SVM
  • day3作业
  • 队列的顺序结构—循环队列的判断条件(rear + 1) % MAXSIZE分析
  • intra-mart实现logicDesigner与forma联动
  • AI编程工具-(四)
  • 五种经典算法路径规划—遗传算法、麻雀算法、狼群优化、粒子群算法、差分进化算法(Matlab源码)
  • IO进程线程2
  • maven高级-05.私服
  • 从零开始实现机器臂仿真(UR5)
  • 计算机毕业设计SpringBoot+Vue.js医院挂号就诊系统(源码+文档+PPT+讲解)
  • 【Azure 架构师学习笔记】- Azure Databricks (15) --Delta Lake 和Data Lake
  • Python-07PDF转Word
  • SpringCloud系列教程(十二):网关配置动态路由
  • Netty笔记3:NIO编程
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例2: 分页和排序
  • 【深入OpenCV图像处理:从基础到实战应用】
  • 内网渗透信息收集linuxkali扫描ip段,收集脚本(web安全)
  • 电子知识笔记—电磁炉单管、持续加热单管和半桥驱动方案解析
  • langchain 中 RecursiveUrlLoader 使用
  • 【华为OD机考】华为OD笔试真题解析(16)--微服务的集成测试
  • 成都网站搭建公司/seo排名点击
  • 做详情页到那个网站找模特素材/广州网站优化推广方案
  • 武汉制作公司网站及推广/专门做网站的公司
  • 制作网站首先做的工作/如何找到网络公关公司
  • 代运营3000一个月靠谱吗/西安网站seo服务
  • 朝阳做网站的公司/网络营销推广公司