Almost straightforward :)  We just have to be careful to do the right thing for each documented Exception, and then handle any other undocumented exceptions in the right way when they occur:

    } catch {
      case e :IOException => throw new InaccessibleDataError(s"Error while getting owner of $file.toURI because $e.getMessage", e)
      case e: SecurityException => throw new FilePermissionError(s"Could not get owner of $file.toURI because $e.getMessage", e)
      //happens if you try to run this on windows, should propagate because it represents a higher level error
      case e: UnsupportedOperationException => throw e
    }