When Credentials readTokenStorageFile gets an IOE. it catches & wraps with the filename, so losing the exception class information.
Is this needed. or can it pass everything up?
If it is needed, well, it's a common pattern: wrapping the exception with the path & operation. Maybe it's time to add an IOE version of NetworkUtils.wrapException() which handles the broader set of IOEs