input: Write a function to create a FileSystem class that allows for saving, deleting, finding, and retrieving task data from a specified directory. The class should initialize with a parameter dictionary containing a 'taskDir' key specifying the directory for task data storage. It should provide methods to save task data with an optional 'id' generation, delete task data by ID, find task data by ID or multiple IDs, retrieve all task data sorted by ID, and get task data for a specific ID without raising an error if not found.
  
  
  class FileSystem(object):
  	# Implementation of the class as provided in the input.
  
  
  Assert the following test cases to ensure the FileSystem class functions correctly:
  
  assert FileSystem({'taskDir': '/tmp/'}).save_task({'data': 'example'})
  assert FileSystem({'taskDir': '/tmp/'}).delete_task('1')
  assert type(FileSystem({'taskDir': '/tmp/'}).find_by_id('1')) == dict
  assert type(FileSystem({'taskDir': '/tmp/'}).find_by_ids(['1', '2'])) == list
  assert all(type(t) == dict for t in FileSystem({'taskDir': '/tmp/'}).all_task_data())
  assert FileSystem({'taskDir': '/tmp/'}).task_data('nonexistent') is None
output: 
  class FileSystem(object):
      def __init__(self, params):
          self.taskDir = params['taskDir']
  
      def save_task(self, task_data, task_id=None):
          if task_id is None:
              task_id = str(uuid.uuid4())
          with open(f"{self.taskDir}/{task_id}.json", 'w') as f:
              json.dump(task_data, f)
          return True
  
      def delete_task(self, task_id):
          try:
              os.remove(f"{self.taskDir}/{task_id}.json")
              return True
          except FileNotFoundError:
              return False
  
      def find_by_id(self, task_id):
          try:
              with open(f"{self.taskDir}/{task_id}.json", 'r') as f:
                  return json.load(f)
          except FileNotFoundError:
              return {}
  
      def find_by_ids(self, task_ids):
          tasks = []
          for task_id in task_ids:
              task = self.find_by_id(task_id)
              if task:
                  tasks.append(task)
          return tasks
  
      def all_task_data(self):
          tasks = []
          for file in os.listdir(self.taskDir):
              if file.endswith('.json'):
                  task_id = file.replace('.json', '')
                  task = self.find_by_id(task_id)
                  if task:
                      tasks.append(task)
          return sorted(tasks, key=lambda x: x.get('id', ''))
  
      def task_data(self, task_id):
          try:
              with open(f"{self.taskDir}/{task_id}.json", 'r') as f:
                  return json.load(f)
          except FileNotFoundError:
              return None
  