2011-03-14 73 views
7

Tengo un problema con la lectura del archivo .xlsx. Algunos archivos temporales con nombre aleatorio se crean en el directorio/tmp/poifiles siempre que utilizo WorkbookFactory.create (inputStream) ;. Este directorio se crea con el permiso RW-R-R para el primer usuario. Entonces, otro usuario en la misma máquina cuando intenta acceder a estos archivos, NO PUEDE.cambiar la ubicación de los archivos temporales creados con Apache POI

Por favor, me sugieren ninguna manera

1) ¿Cómo puedo crear estos archivos temporales en el directorio/tmp y no siempre en/tmp/poifiles (estoy usando RHEL V5.0)

2) y ¿cómo puedo configurar POI para cambiar la ubicación desde donde lee los archivos temporales?

Más ayuda para resolver mi problema de usuarios diferentes que acceden a los mismos archivos .xlsx a través de POI es muy necesario.

Respuesta

11

yupi ... Tengo la solución ....

PDI utiliza el siguiente método para crear archivos temporales.

public static File createTempFile(String prefix, String suffix) 
{ 
    if (dir == null) { 
     dir = new File(System.getProperty("java.io.tmpdir"), "poifiles"); 
     dir.mkdir(); 
     if (System.getProperty("poi.keep.tmp.files") == null) { 
      dir.deleteOnExit(); 
     } 
    } 
    File newFile = new File(dir, prefix + rnd.nextInt() + suffix); 
    if (System.getProperty("poi.keep.tmp.files") == null) { 
     newFile.deleteOnExit(); 
    } 
    return newFile; 
} 

Ahora aquí como podemos ver se pone la ubicación de la propiedad "java.io.tmpdir" y crea directorio poifiles dentro de esa ...

me cambió la ubicación de java.io.tmpdir por estableciendo esta propiedad (usando System.setProperty ("java.io.tmpdir", "somepath")) a la ubicación específica del usuario ... y Voila ... Cada usuario ahora puede crear archivos temporales en una ubicación siempre accesible para ellos y no solo el primer usuario tiene el privilegio de crear un directorio accesible solo para él ... !!!

3

Aquí es cómo puede cambiar la ubicación desde donde PDI lee los archivos temporales de programación si no son capaces de cambiar la propiedad del sistema "java.io.tmpdir"

File dir = new File("somepath"); 
dir.mkdir(); 
TempFile.setTempFileCreationStrategy(new TempFile.DefaultTempFileCreationStrategy(dir)); 

Esto es impulsado por el Apache POI TempFile helper class

Cuestiones relacionadas