Kettle 生成定制日期文本文件名(转载)

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);
  }
 }

猜你喜欢

转载自lichao-super.iteye.com/blog/1577169
今日推荐