do not reinvent the wheel in FileUtil