Some pathnames which contains special character(s) may lead to unexpected results. For example, there is a file named "/foo/file*" in my cluster, created by "DistributedFileSystem.create(new Path("/foo/file*"))". When I want to remove it, I type in "hadoop fs -rm /foo/file*" in shell. However, I remove all the files with the prefix of "/foo/file*" unexpectedly. There are also some other characters just like '*', such as ' ', '|', '&', etc.
Therefore, it's necessary to restrict the occurrence of these characters in pathname. A simple but effective way is to forbid assigned characters in pathname when new file or directory is created.
It is also important to add the same function on the Router model and WebHdfs model. I will add them as two subtasks later.