csv跨域傳輸再生成csv檔案處理

luyu0207發表於2020-10-25

前文:

使用hutool,csvUtil處理讀取csv檔案裡面資訊傳送給mq,然後從mq上面拿到資料在落地生成csv,這裡思路做個記錄

正文:

1、首先我們讀取csv檔案,
CsvReader reader = CsvUtil.getReader();
//設定分隔符
reader.setFieldSeparator(’,’);
//csv檔案,這裡只是個例子
File file = new File(“e:/testWrite.csv”);
CsvData csvData = reader.read(file,Charset.forName(“UTF-8”));

2、對csv資料進行處理,轉成json資料
//這裡是獲取csv第一行資料(非標題),第一行資料是列名資料
CsvRow csvRow = csvData.getRow(0);
// org.json.JSONObject
JSONObject object = new JSONObject();
//因為csvData第一行資料是列名所以跳過0直接從1開始
for(int i=1;i<csvData.getRowCount();i++){
//根據csvRow的列名新增到object
for(int j=0;j<csvRow.size();j++){
object.put(csvRow.get(j), csvData.getRow(i).get(j));
}
3、json資料轉成byte陣列併傳送
MqPublisher mqPublisher = MqPublisher.getInstance(agent, service, topic);
byte[] bytes = AES.encrypt(json,jsonKey);
mqPublisher.send(bytes);
}
3、消費者接收資訊並轉成csv
//用一個jsonArray記錄存入訊息
private static JSONArray xxArray = new JSONArray();
//儲存訊息數量
private static long flagNumber;
//訊息數量初始化
private static AtomicLong receiveNumber = new AtomicLong(1);

消費者拿到byte[]陣列資訊,轉換成string然後轉換成JSONObject
JSONObject jsonObject = new JSONObject(decryptStr);
每接收到一條訊息,receiveNumber就加一,並將flagNumber賦值,並新增到xxArray
receiveNumber.getAndIncrement();
flagNumber = receiveNumber.get();
xxArray .put(jsonObject);
如果xxArray的數量等於flagNumber(即達到配置所定的多少條訊息生成csv檔案)
jsonToCsv(ba,csvbwDirStatic);
private static void jsonToCsv(JSONArray result,String dir){
String fileName = dir+File.separator+getFileNameId()+".csv";
logger.info(“MQ解密後資料=”+result);
List<Map<String, String>> flatJson;
try {
flatJson = JSONFlattener.parse(result);
result = new JSONArray();
CSVWriter.writeToFile(CSVWriter.getCSV(flatJson), fileName);
logger.info(“MQ資料解密後生成檔案=”+fileName);
} catch (JSONException e) {
// TODO Auto-generated catch block

	}
   
}
完結撒花

相關文章