import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.json.CDL;
import org.json.JSONArray;
import org.json.JSONException;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
* @ClassName Test
* @Description TODO
* @Autor yanni
* @Date 2021/8/5 17:36
* @Version 1.0
public class Test {
public static void main(String[] args) {
Logger logger = Logger.getLogger(Test.class);
String tableName = "test1";
String dataStr = readFileContent("D:\\test.txt");
logger.info("数据示例:"+dataStr.substring(0,200)+"......");
//data2Oracle2(dataStr,tableName);
// 定义一个CSV路径
String csvFilePath = "D:/"+tableName+".csv";
//获取到
com.alibaba.fastjson.JSONObject parseObject = com.alibaba.fastjson.JSONObject.parseObject(dataStr);
JSONObject data1 = parseObject.getJSONObject("data");
String data2 = data1.getString("data");
//判断不为空
if (StringUtils.isNotBlank(data2)){
//过滤数据中存在的\n
String str_all = data2.replaceAll("\\\\n", "");
//写入csv文件
jsonTocsvAndSave(str_all,csvFilePath);
}else{
System.out.println("数据为空");
public static String readFileContent(String fileName) {
File file = new File(fileName);
BufferedReader reader = null;
StringBuffer sbf = new StringBuffer();
try {
reader = new BufferedReader(new FileReader(file));
String tempStr;
while ((tempStr = reader.readLine()) != null) {
sbf.append(tempStr);
reader.close();
return sbf.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
e1.printStackTrace();
return sbf.toString();
private static void jsonTocsvAndSave(String provincesJsonString, String fileName) {
try {
File file=new File(fileName);
FileUtils.writeStringToFile(file, json2csv(provincesJsonString));
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
private static String json2csv(String provincesJsonString) throws JSONException {
JSONArray jsonArray = new JSONArray(provincesJsonString);
//System.out.println(jsonArray.length());
return CDL.toString(jsonArray);
以上写入方法存在点问题,就是在循环往一个csv文件写数据的时候,表头信息也会重复写入到文件中。下面这种方法可以将表头和数据分开来写入:
* json转csv文件,并保存
* (此方法表头header和数据是分开写入的)
* @param provincesJsonString
* @param circle_num
private void jsonTocsvAndSave2(FileWriter fw,String provincesJsonString,int circle_num) {
com.alibaba.fastjson.JSONArray jsonArray = com.alibaba.fastjson.JSONArray.parseArray(provincesJsonString);
//定义一个变量
String enter = null;
//判断系统是windows还是Linux
String os = System.getProperty("os.name");
if(os.toLowerCase().startsWith("win")){
enter = "\r\n";
}else{
enter = "\n";
//将header写入csv(本方法是分页读取数据,设置了10页创建新的文件,故circle_num%10==0,就写一次header)
if (circle_num%10==0){
JSONObject jsonObject = jsonArray.getJSONObject(0);
Set<String> keySet = jsonObject.keySet();
StringBuffer headerBuffer = new StringBuffer();
for (String key : keySet) {
headerBuffer.append(key).append(",");
String header = headerBuffer.toString().substring(0, headerBuffer.toString().length() - 1);
try {
fw.write(header+enter);
} catch (IOException e) {
e.printStackTrace();
try {
//遍历jsonArray,将数据写入csv文件
for (int i=0;i<jsonArray.size();i++){
JSONObject dataJsonObject = jsonArray.getJSONObject(i);
Set<String> keySet2 = dataJsonObject.keySet();
StringBuffer dataBuffer = new StringBuffer();
for (String key : keySet2) {
//每个字段的值都添加双引号,这样可以规避即使每个值中存在逗号,不会出现数据混乱
dataBuffer.append("\""+dataJsonObject.getString(key)+"\"").append(",");
String dataStr = dataBuffer.toString().substring(0, dataBuffer.toString().length() - 1);
fw.write(dataStr+enter);
fw.flush();
} catch (IOException e) {
e.printStackTrace();
读取一个json文件,并将数据写入csv文件中:package com.zhbr.apig2oracle;import com.alibaba.fastjson.JSONObject;import org.apache.commons.io.FileUtils;import org.apache.commons.lang3.StringUtils;import org.apache.log4j.Logger;import org.json.CDL;import org.json.JSONAr
飞鸟的心情:
使用Dockerfile制作nginx镜像
HOPE YOU WELL:
使用Dockerfile制作nginx镜像
HOPE YOU WELL:
使用Dockerfile制作nginx镜像
珈蓝冰雨: