1.发现kettle3.2,生成文本文件数据时,不能在每行数据后加分隔符。
2.具体改造了org.pentaho.di.trans.steps.textfileoutput包TextFileOutput类中
private void writeRowToFile(RowMetaInterface rowMeta, Object[] r) throws KettleStepException
{
try
{
if (meta.getOutputFields()==null || meta.getOutputFields().length==0)
{
for (int i=0;i<rowMeta.size();i )
{
if (i>0 && data.binarySeparator.length>0)
{
data.writer.write(data.binarySeparator);
}
ValueMetaInterface v=rowMeta.getValueMeta(i);
Object valueData = r[i];
// no special null value default was specified since no fields are specified at all
// As such, we pass null
//
writeField(v, valueData, null);
// // 数据末尾加特殊字符
// if(i==(rowMeta.size()-1)){
// data.writer.write(data.binarySeparator);
// }
}
data.writer.write(data.binaryNewline);
}
else
{
for (int i=0;i<meta.getOutputFields().length;i )
{
if (i>0 && data.binarySeparator.length>0)
data.writer.write(data.binarySeparator);
ValueMetaInterface v = rowMeta.getValueMeta(data.fieldnrs[i]);
Object valueData = r[data.fieldnrs[i]];
writeField(v, valueData, data.binaryNullValue[i]);
// // 数据末尾加特殊字符
// if(i==(meta.getOutputFields().length-1)){
// data.writer.write(data.binarySeparator);
// }
}
data.writer.write(data.binaryNewline);
}
incrementLinesOutput();
// flush every 4k lines
// if (linesOutput>0 && (linesOutput&0xFFF)==0) data.writer.flush();
}
catch(Exception e)
{
throw new KettleStepException("Error writing line", e);
}
}