El fichero te lo creará en el servidor, aunque solo le pongas la ruta relativa. Lo que pasa es que no lo encuentras 

. Si en vez de 
Código:
 salidaBytes = new FileOutputStream(new File("ruta/calendario.xml"));
  pones 
Código:
 File aFile = new File("ruta/calendario.xml");
System.err.println("El fichero es: " + aFile.getAbsolutePath());
salidaBytes = new FileOutputStream(afile);
  Verás donde te lo está creando. El fichero se crea en el servidor, si estamos hablando de JSP/servlets, y el API fileupload es para enviar ficheros desde el cliente al servidor. Para simplemente crearlos en el servidor no hace falta. 
S!