添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
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 飞鸟的心情: docker: Error response from daemon: failed to create endpoint boring_jennings on network bridge: adding interface veth94ed57e to bridge docker0 failed: Device does not exist. 操作之后是这样的 使用Dockerfile制作nginx镜像 HOPE YOU WELL: 使用Dockerfile制作nginx镜像 HOPE YOU WELL: /usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:290: starting container process caused "exec: \"-g\": executable file not found in $PATH". 使用Dockerfile制作nginx镜像 珈蓝冰雨: 哥们,你这一个Nginx镜像将近一个G了,还不如源码呢,太大了 表情包 那些个RUN可以合并一下,尽量少用可以减小镜像体积