使用java将csv文件转成json文件

使用java将csv文件转成json文件,仅供参考。

csv文件转json文件的完整代码如下:

复制代码
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvValidationException;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;

/**
 * csv文件转json文件
 */
public class CsvToJson {

    /**
     1.  pom.xml导入依赖    在<dependencies></dependencies>标签中加入下面的依赖

     <dependency>
     <groupId>com.opencsv</groupId>
     <artifactId>opencsv</artifactId>
     <version>5.4</version>
     </dependency>

     <dependency>
     <groupId>cn.hutool</groupId>
     <artifactId>hutool-all</artifactId>
     <version>5.8.4</version>
     </dependency>

     2. main()方法 中指定  csv源文件路径  和导出的json文件路径


     */


    public static void main(String[] args) {


        // 源文件路径
//        String csvFile = "/path/to/your/csv/file.csv";
        // 导出文件路径
        String jsonFile = "E:\\path\\your\\json\\file.json";

        CSVReader csvReader = null;
        try {
            csvReader = new CSVReader(new FileReader(csvFile));
            String[] headers = csvReader.readNext();
            // headers 第一行表头 [is1, is2, is3, is4, is5]
            if (headers == null) {
                throw new AssertionError("No headers");
            }
            JSONArray jsonArray = new JSONArray();
            String[] lineInArray;
            // csvReader.readNext()   每一行的内容   [sample1, {"clt" :[] }, , , ]
            while ((lineInArray = csvReader.readNext()) != null) {
                JSONObject jsonObject = new JSONObject();
                for (int i = 0; i < headers.length; i++) {

                    // headers[i] 是这一行的表头 is1 is2 is3
                    // lineInArray[i] 是这一行的数据值 sample1 {"clt" :[] }  sample2  {"clt" :[1,2] }

                    // 数据值判空 && 去除空格!=空字符串
                    if (lineInArray[i] != null && !"".equals(lineInArray[i].trim())) {

                        // 过滤excel函数关键词  包含则不添加
                        if (!isContain(lineInArray[i])) {

                            // 这个条件时临时写的 可删除   不等于公式"s=s*(n -1)"   if (!"s=s*(n -1)".equals(lineInArray[i]))
                            if (!"s=s*(n -1)".equals(lineInArray[i])) {

                                // 写入json对象中   "is1":"sample2"      "is2":"{\"clt\" :[1,2] }"
                                jsonObject.set(headers[i], lineInArray[i]);

                            }


                        }
                    }


                }
                // 如果json对象不为空 jsonArray添加对象
                if (!jsonObject.isEmpty()) {
                    jsonArray.add(jsonObject);
                }

            }
            csvReader.close();
            writeJsonToFile(jsonArray, jsonFile);
        } catch (IOException | CsvValidationException e) {
            e.printStackTrace();
        }
    }

    
    /**
     * 导出文件
     * @param jsonArray 导出数据
     * @param jsonFile 导出文件路径
     */
    private static void writeJsonToFile(JSONArray jsonArray, String jsonFile) {
        try (FileWriter file = new FileWriter(jsonFile)) {
            file.write(jsonArray.toString());
            System.out.println("Successfully Copied JSON Object to File...");
            System.out.println("\nJSON Object: " + jsonArray);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    /**
     * 判断字符串str是否包含 excel函数关键字
     *
     * @param str
     * @return
     */
    public static boolean isContain(String str) {
        ArrayList<String> functionList = new ArrayList<>();
        // excel函数 关键单词   大小写
        functionList.add("SUM");
        functionList.add("sum");
        functionList.add("AVERAGE");
        functionList.add("average");
        functionList.add("MAX");
        functionList.add("max");
        functionList.add("MIN");
        functionList.add("min");
        functionList.add("IF");
        functionList.add("if");
        functionList.add("COUNT");
        functionList.add("count");
        functionList.add("VLOOKUP");
        functionList.add("vlookup");

        functionList.add("HLOOKUP");
        functionList.add("hlookup");

        functionList.add("INDEX");
        functionList.add("index");

        functionList.add("MATCH");
        functionList.add("match");

        functionList.add("CONCATENATE");
        functionList.add("concatenate");

        functionList.add("MID");
        functionList.add("mid");

        functionList.add("LEFT");
        functionList.add("left");

        functionList.add("RIGHT");
        functionList.add("right");

        functionList.add("INT");
        functionList.add("int");

        functionList.add("ROUND");
        functionList.add("round");

        functionList.add("SIN");
        functionList.add("sin");

        functionList.add("COS");
        functionList.add("cos");

        functionList.add("TAN");
        functionList.add("tan");

        functionList.add("LOG");
        functionList.add("log");

        functionList.add("EXP");
        functionList.add("exp");

        functionList.add("STDEV");
        functionList.add("stdev");

        functionList.add("VAR");
        functionList.add("var");

        for (String value : functionList) {
            if (str.contains(value)) {
                return true;
            }
        }


        return false;
    }


}
复制代码
Excel文件转Csv文件的完整代码如下: (需要先下载jar包,添加到项目中,add as library)
复制代码
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.read.biff.BiffException;


/**
 * Excel文件转Csv文件
 * Java操作Excel文件以及将xls/xlsx转为csv文件
 * 
 * jar包下载地址  JXL下载地址:http://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.6/jexcelapi_2_6_6.zip/download
 * 各版本下载地址:http://sourceforge.net/projects/jexcelapi/files/
 */
public class ExcelToCsv {

    public static void main(String[] args) {

        String buffer = "";
        try {
            // excel文件路径
            String fileName = "E:\\youPath\\excel\\新建XLSX工作表.xlsx";
            File file = new File(fileName);
            // 设置读文件编码
            WorkbookSettings setEncode = new WorkbookSettings();
            setEncode.setEncoding("GB2312");
            // 从文件流中获取Excel工作区对象(WorkBook)
            Workbook wb = Workbook.getWorkbook(file, setEncode);
            Sheet sheet = wb.getSheet(0);

            for (int i = 0; i < sheet.getRows(); i++) {
                for (int j = 0; j < sheet.getColumns(); j++) {
                    Cell cell = sheet.getCell(j, i);
                    buffer += cell.getContents().replaceAll("\n", " ") + ",";
                }
                buffer = buffer.substring(0, buffer.lastIndexOf(",")).toString();
                buffer += "\n";
            }
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //write the string into the file
        // csv保存路径
        String savePath = "E:\\yourPath\\csv\\ExcelToCsvTest.csv";

        File saveCSV = new File(savePath);
        try {
            if (!saveCSV.exists())
                saveCSV.createNewFile();
            BufferedWriter writer = new BufferedWriter(new FileWriter(saveCSV));
            writer.write(buffer);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
复制代码

 

posted @   井中月1001  阅读(584)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示