package com.smtscript.lib.csv; import java.io.File; import java.io.FileOutputStream; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import org.mozilla.javascript.NativeArray; import org.mozilla.javascript.NativeObject; import com.smtscript.utils.SMTStatic; public class ScriptCSVWriter { private String _newLine = "\r\n"; private Charset _charset = Charset.forName("UTF-8"); private FileOutputStream _fos; private List _listColName = new ArrayList(); public ScriptCSVWriter(File file) throws Exception { _fos = new FileOutputStream(file); } public void close() throws Exception { if(_fos != null) { _fos.close(); _fos = null; } } public void setNewLine(String newLine) { _newLine = newLine; } public void setCharset(String charSet) { _charset = Charset.forName(charSet); } public void writeAllLines(NativeArray nvLines) throws Exception { for(int i = 0; i < nvLines.size(); i ++) { NativeObject nvLine = (NativeObject) SMTStatic.unwrapObject(nvLines.get(i)); writeLine(nvLine); } } public void writeLine(NativeObject nvLine) throws Exception { StringBuilder sb = new StringBuilder(); for(int i = 0; i < _listColName.size(); i ++) { String colName = _listColName.get(i); String value = SMTStatic.getJSValue(nvLine, colName, "").toString(); if(i > 0) sb.append(","); sb.append(convCellValue(value)); } sb.append(_newLine); _fos.write(sb.toString().getBytes(_charset)); } public void writeColumns(NativeArray arr, boolean toFile) throws Exception { _listColName.clear(); StringBuilder sb = new StringBuilder(); for(int i = 0; i < arr.size(); i ++) { String colName = SMTStatic.unwrapObject(arr.get(i)).toString(); _listColName.add(colName); if(i > 0) sb.append(","); sb.append(convCellValue(colName)); } sb.append(_newLine); if(toFile) { _fos.write(sb.toString().getBytes(_charset)); } } protected String convCellValue(String text) { if(text.indexOf(",") >= 0 || text.indexOf("\r") >= 0 || text.indexOf("\n") >= 0) { return "\"" + text.replace("\"", "\"\"") + "\""; } else { return text; } } }