pentaho/pentaho-kettle · error · KettleException
PropertyInput.Log.NoFiles
Error message
PropertyInput.Log.NoFiles
What it means
PropertyInput.processRow() throws this on the first row when the step is configured to read files directly (not from a field) and the resolved file list is null or empty. The step cannot proceed without at least one input properties/INI file.
Solutions
- Open the step dialog and add at least one valid filename or wildcard
- Verify variables in the filename resolve at runtime (check the transformation's parameter values)
- Check the working directory / VFS path so the wildcard actually matches files
- Alternatively switch 'File defined in a field?' on and supply filenames via the incoming row stream
Example fix
// before: no files configured
String filesField = null; // step reads from dialog, dialog empty
// after: ensure file or field source
meta.setFileField(true);
meta.setDynamicFilenameField("filename"); // incoming rows carry the file name Defensive patterns
Strategy: validation
Validate before calling
// before running the transformation, resolve and check the configured files
FileInputList list = meta.getFiles(transMeta.getBowl(), null);
if (list == null || list.nrOfFiles() == 0) {
throw new IllegalStateException("Property Input has no input files configured");
} Type guard
boolean hasFiles = (list != null && list.nrOfFiles() > 0);
Try / catch
try {
// run transformation / execute step
} catch (KettleException e) {
if (e.getMessage() != null && e.getMessage().contains("NoFiles")) {
logError("No input files for Property Input; fix step configuration");
} else { throw e; }
} Prevention
- Always configure at least one filename or a 'filename from field' source
- Avoid unresolved variables in file paths; pass parameters at launch
- Test wildcards against the runtime environment's file layout
- Use a Job 'Check if file exists' entry before the transformation
When it happens
Trigger: Executing the Property Input step with meta.isFileField()==false while getFiles() returns null or a FileInputList with zero files — e.g. no filename configured, wildcard matching nothing, or all files filtered out.
Common situations: Wildcard path (e.g. /data/*.properties) matches nothing because files are absent or the path is wrong; variable in the filename is unresolved at runtime; user forgot to enter any filenames in the step dialog.
Understand the failure class
Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.
Related errors
- AccessInput.Exception.CouldnotFindField
- AccessInput.Log.NoField
- AddSequence.Exception.NoSpecifiedMethod
- At this time we don't support the use of multiple cluster…
- AutoDoc.Exception.FilenameFieldNotFound
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/4d100ed6b1342739.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/propertyinput/PropertyInput.java:69
* @since 24-03-2008
*/
public class PropertyInput extends BaseStep implements StepInterface {
private static Class<?> PKG = PropertyInputMeta.class; // for i18n purposes, needed by Translator2!!
private PropertyInputMeta meta;
private PropertyInputData data;
public PropertyInput( StepMeta stepMeta, StepDataInterface stepDataInterface, int copyNr, TransMeta transMeta,
Trans trans ) {
super( stepMeta, stepDataInterface, copyNr, transMeta, trans );
}
@Override
public boolean processRow( StepMetaInterface smi, StepDataInterface sdi ) throws KettleException {
if ( first && !meta.isFileField() ) {
data.files = meta.getFiles( getTransMeta().getBowl(), this );
if ( data.files == null || data.files.nrOfFiles() == 0 ) {
throw new KettleException( BaseMessages.getString( PKG, "PropertyInput.Log.NoFiles" ) );
}
handleMissingFiles();
// Create the output row meta-data
data.outputRowMeta = new RowMeta();
meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
metaStore ); // get the metadata populated
// Create convert meta-data objects that will contain Date & Number formatters
//
data.convertRowMeta = data.outputRowMeta.cloneToType( ValueMetaInterface.TYPE_STRING );
}
Object[] r = null;
try {
// Grab one row
Object[] outputRowData = getOneRow();View on GitHub (pinned to f3058517a1)