Java 读取特定目录下子文件夹的 json格式文件并解析

news/2024/9/18 20:30:07 标签: java

一、需求

  有一个目录结构,包含多个子文件夹,每个子文件夹中都有一个名为goods.txt的文件,文件内容以 JSON 格式存储。现在需要将所有的goods.txt文件内容读取出来,放在一个`List`集合中,以便进行后续的处理。

二、使用类库

1.JDK8
2. FastJSON2:解析 JSON 格式的数据。
3. Lombok:简化代码。

三、代码实现

goods.txt内容格式化后如下所示:
{
    "brand": "brand",
    "imgList": [
        {
            "imgurl": "xxxxxx.jpg"
        }
    ],
    "model": "500ml",
    "name": "name",
    "price": "290.00",
    "priceFrom": "xxxxxxs",
    "spiderUrl": "xxxxx",
    "unit": "RMB"
}

功能代码:

java">import com.alibaba.fastjson2.JSON;
import lombok.Data;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;

/**
 * 文件读取控制器,用于读取特定目录下子文件夹中的 goods.txt 文件并解析为 DataVersionResult 对象。
 */
public class FIleReadController {
    public static void main(String[] args) {
        // 定义要遍历的目录路径
        String directoryPath = "E:/software/test/toiletrie/";

        // 创建用于存储解析后的 DataVersionResult 对象的列表
        List<DataVersionResult> resultList = new ArrayList<>();

        // 获取指定目录下的所有子文件夹
        File directory = new File(directoryPath);
        File[] subdirectories = directory.listFiles(File::isDirectory);

        if (subdirectories!= null) {
            // 遍历子文件夹
            for (File subdirectory : subdirectories) {
                // 构建 goods.txt 文件的完整路径
                File goodsFile = new File(subdirectory, "goods.txt");
                if (goodsFile.exists()) {
                    try {
                        // 读取 goods.txt 文件的内容
                        String jsonContent = new String(Files.readAllBytes(goodsFile.toPath()));
                        // 使用 FastJSON2 解析 JSON 字符串为 DataVersionResult 对象
                        DataVersionResult goods = JSON.parseObject(jsonContent, DataVersionResult.class);
                        // 将解析后的对象添加到列表中
                        resultList.add(goods);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

        // 对 resultList 进行后续处理,我的是转为excel,略
    }
}

/**
 * 数据版本结果类。
 */
@Data
class DataVersionResult {
    private Integer index;
    private String url;
    private String category;
    private String detailCategory;
    private String name;
    private String description;
    private String brand;
    private String model;
    private String price;
    private String priceFrom;
    private String spiderUrl;
    private Long productId;
    private String unit;
    private List<ProductImgUrl.ProductImg> imgList;
}

/**
 * 产品图片 URL 类。
 */
@Data
class ProductImgUrl implements Serializable {
    private List<ProductImg> imglist;

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    static class ProductImg implements Serializable {
        private String imgurl;
    }
}

  通过File类获取指定目录下的所有子文件夹。在遍历子文件夹的过程中,为每个子文件夹构建goods.txt文件的路径。如果该文件存在,就尝试读取其内容。

  使用 FastJSON2 的JSON.parseObject方法将 JSON 字符串解析为DataVersionResult类的对象。

  希望这篇文章对你有所帮助,如果你有任何问题或建议,欢迎在评论区留言。


所有的大人都曾经是小孩,虽然,只有少数人记得。 --《小王子》


http://www.niftyadmin.cn/n/5664477.html

相关文章

数字化转型全攻略:构建未来企业的数字化业务知识体系,助力企业腾飞

数字化转型如何为企业带来新机遇 在当今竞争激烈的市场中&#xff0c;数字化转型已经成为每个企业的生存之道。企业通过大数据、人工智能、物联网等技术&#xff0c;不仅提升了运营效率&#xff0c;还彻底改变了客户体验。然而&#xff0c;数字化转型并非只是简单的技术实施&a…

调用系统的录音设备提示:line with format PCM_SIGNED 16000.0 Hz

javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 16000.0 Hz, 8 bit, mono, 1 bytes/frame, not supported. 打开 设置->隐私->麦克风->允许应用访问你的麦克风 与 16000Hz没关系 与 16000Hz没关系 与 16000Hz没关系

【Lua坑】Lua协程coroutine无法正常完整执行问题

问题&#xff1a;发现Lua协程执行到一半&#xff0c;突然被掐断了一样等到了设定的时间没有正常执行协程后续代码&#xff01;非必现bug&#xff0c;若发生大概率在高频率使用协程时易触发。 LuaFramework或xLua uLua都自带有协程coroutine&#xff0c;而且基本都使用对象池缓…

C# winform 字符串模糊查询,也就是查找子串

C# winform 字符串模糊查询&#xff0c;也就是查找子串。 1. String.Contains() Contains() 方法通常使用内部的 IndexOf() 实现&#xff0c;所以它的性能与 IndexOf() 相近。这是一个非常快速的方法&#xff0c;适合于一般的应用场景。 2. String.IndexOf() IndexOf() 方法…

SOLIDWORKS® 2025 新增功能 - SIMULATION

SOLIDWORKS Simulation 1常规弹簧连接 • 通过定义仅轴向、各向同性或正交各向异性弹簧&#xff0c; 在曲面之间轻松创建自定义弹簧连接。 • 通过添加自定义合规性提高仿真性能和精度。 优点 利用新的弹簧连接功能&#xff0c; 实现更简单、更逼真的仿真 设置。 2增强了…

新手学习Python第九天-新手笔记 速学中

现在是北京时间06&#xff1a;55,早上06&#xff1a;44到达实验室&#xff0c;开始学习。对&#xff0c;昨天陪室友考教师资格证了&#xff0c;溜溜达达一天很舒服&#xff0c;两周一次的放松感。这几天和未来几天的压力真的很大&#xff0c;有很多要去学习的&#xff0c;比如C…

深入浅出:使用Retriever实现高效文档检索

引言 在数据驱动的现代社会&#xff0c;快速准确地检索信息变得至关重要。Retriever作为一种接口&#xff0c;能够根据无结构的查询返回相关文档&#xff0c;其应用十分广泛。本文将深入探讨Retrievers的工作原理、如何使用及其在实际应用中的挑战和解决方案。 主要内容 什么…

Java---网络编程

一.网络的基本概念 1.指令 二.网络模型 1.七层模型 七层模型&#xff0c;也称为OSI&#xff08;Open System Interconnection&#xff09;参考模型&#xff0c;是国际标准化组织&#xff08;ISO&#xff09;制 定 的一个用于计算机或通讯系统间互联的标准体系。它是一个七层…