有一个需求是将远程服务器上一个目录下的所有文件列出来放到一个文件中,作一个清单。
kettle中有组件是能获取文件名,但是那个只能获取当前服务器的。而kettle中又没有list的类型作为变量。找了一圈找到了解决办法,特此记录下
首先使用java代码登录sftp服务器,获取远程目录文件名作为list
List fileList = getDirList(ftpHost,ftpUserName,ftpPassword,ftpPort,sftpPath);
if(fileList.size()>0){
for (int i = 0; i < fileList.size(); i++) {
String fileName = (String)fileList.get(i);
Object[] clonedRow = getInputRowMeta().cloneRow(r);
clonedRow = createOutputRow(clonedRow, fileList.size());
//Some transform logic
get(Fields.Out, "file_names").setValue(clonedRow, fileList.get(i).toString());
putRow(data.outputRowMeta, clonedRow);
}
}
return true;
}
这样就可以了
注意:java代码组件之前需要添加一个获取变量或者其他输入(表输入等)的组件,作为java组件的输入行,这样才能在循环里复制行