add exception
add file io