file abstraction