pentaho/pentaho-kettle · error · KettleException
AccessOutputMeta.Exception.FileDoesNotExist
AccessOutputMeta.Exception.FileDoesNotExist
Error message
AccessOutputMeta.Exception.FileDoesNotExist
What it means
AccessOutputDialog.getTableName resolves the configured filename through VFS, converts it to a local File, and requires it to be an existing regular file before opening the Access DB read-only to list table names. If the file is missing, KettleException with AccessOutputMeta.Exception.FileDoesNotExist is thrown.
Solutions
- Set a valid existing .mdb/.accdb path in the Filename field
- Define the variables used in the filename before browsing
- Ensure the VFS URL resolves to a local file path
- Mount/verify the network share hosting the file
- Restore or recreate the Access database file
Example fix
null
Defensive patterns
Strategy: validation
Validate before calling
String real = transMeta.environmentSubstitute(meta.getFilename());
FileObject fo = KettleVFS.getInstance(transMeta.getBowl()).getFileObject(real, transMeta);
File f = FileUtils.toFile(fo.getURL());
if (f == null || !f.exists() || !f.isFile()) {
throw new IllegalArgumentException("Access DB not a local file: " + real);
} Prevention
- Store Access files on paths accessible as local files from Spoon
- Define all variables used in the filename before browsing tables
- Avoid VFS schemes that don't map to java.io.File
- Keep the database file at a stable location across environments
When it happens
Trigger: Clicking the 'Browse table' button in the Access Output dialog when the substituted filename doesn't exist, is a directory, or the VFS URL cannot map to a real local file.
Common situations: Variable-based filename not defined at design time; file on an unmounted share; using a VFS URL scheme that does not resolve to a local path; file deleted since configuration.
Understand the failure class
Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.
Related errors
- AccessInputMeta.Exception.FileDoesNotExist
- AccessOutputMeta.Exception.ErrorGettingFields
- AccessOutputMeta.Exception.FileDoesNotExist
- AccessOutputMeta.Exception.TableDoesNotExist
- Cannot open control file
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/f3892a05fa972400.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/ms-access/ui/src/main/java/org/pentaho/di/ui/trans/steps/accessoutput/AccessOutputDialog.java:468
stepname = wStepname.getText(); // return value
getInfo( input );
dispose();
}
private void getTableName() {
AccessOutputMeta meta = new AccessOutputMeta();
getInfo( meta );
// New class: SelectTableDialog
try {
String realFilename = transMeta.environmentSubstitute( meta.getFilename() );
FileObject fileObject = KettleVFS.getInstance( transMeta.getBowl() ).getFileObject( realFilename, transMeta );
File file = FileUtils.toFile( fileObject.getURL() );
if ( !file.exists() || !file.isFile() ) {
throw new KettleException( BaseMessages.getString(
PKG, "AccessOutputMeta.Exception.FileDoesNotExist", realFilename ) );
}
try ( Database database = new DatabaseBuilder( file ).setReadOnly( true ).open() ) {
Set<String> set = database.getTableNames();
String[] tablenames = set.toArray( new String[set.size()] );
EnterSelectionDialog dialog =
new EnterSelectionDialog( shell, tablenames,
BaseMessages.getString( PKG, "AccessOutputDialog.Dialog.SelectATable.Title" ),
BaseMessages.getString( PKG, "AccessOutputDialog.Dialog.SelectATable.Message" ) );
String tablename = dialog.open();
if ( tablename != null ) {
wTablename.setText( tablename );
}
}
} catch ( Throwable e ) {
new ErrorDialog(
shell, BaseMessages.getString( PKG, "AccessOutputDialog.UnableToGetListOfTables.Title" ), BaseMessagesView on GitHub (pinned to f3058517a1)