Design a data structure that simulates an in-memory file system. Implement the FileSystem class with the following behaviors:
FileSystem() initializes the object of the system.
ls(path): If the given path is a file path, return a list containing only that file's name. If it is a directory path, return a list of all files and subdirectories in that directory. The output should be sorted in lexicographic (alphabetical) order.
mkdir(path): Create a new directory given by path. This should create any intermediate directories that do not exist as well. This operation does not return anything.
addContentToFile(filePath, content): If the file at filePath does not exist, create a new file and add content to it. If the file already exists, append the new content to the end of the current content. This operation does not return anything.
readContentFromFile(filePath): Return the current content of the file at filePath.
All paths are absolute (they begin with "/"). The root directory is "/" (forward slash). There are no trailing slashes at the end of paths (except for the root path itself). All file and directory names consist only of lowercase letters, and in each directory no two files or subdirectories share the same name.