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

  1. Open the step dialog and add at least one valid filename or wildcard
  2. Verify variables in the filename resolve at runtime (check the transformation's parameter values)
  3. Check the working directory / VFS path so the wildcard actually matches files
  4. 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

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


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)