¿Cómo crear un archivo temporal en Java sin el número aleatorio adjunto al nombre del archivo?

Necesito crear un archivo temporal, así que probé esto:

String[] TempFiles = {"c1234c10","c1234c11","c1234c12","c1234c13"}; for (int i = 0; i <= 3; i++) { try { String tempFile = TempFiles[i]; File temp = File.createTempFile(tempFile, ".xls"); System.out.println("Temp file : " + temp.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); } } 

El resultado es algo como esto:

  Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c108415816200650069233.xls Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c113748833645638701089.xls Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c126104766829220422260.xls Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c137493179265536640669.xls 

Ahora, no quiero los números adicionales (long int) que se agregan al nombre del archivo. ¿Cómo puedo lograr eso? Gracias

Primero, use el siguiente fragmento para obtener el directorio temporal del sistema:

 String tDir = System.getProperty("java.io.tmpdir"); 

Luego use la variable tDir junto con su matriz tempFiles[] para crear cada archivo individualmente.

No puede si usa File.createTempFile para generar un nombre de archivo temporal. Miré el origen de Java para generar un archivo temporal (para Java 1.7, no estableciste tu versión, así que solo usé el mío):

 private static class TempDirectory { private TempDirectory() { } // temporary directory location private static final File tmpdir = new File(fs.normalize(AccessController .doPrivileged(new GetPropertyAction("java.io.tmpdir")))); static File location() { return tmpdir; } // file name generation private static final SecureRandom random = new SecureRandom(); static File generateFile(String prefix, String suffix, File dir) { long n = random.nextLong(); if (n == Long.MIN_VALUE) { n = 0; // corner case } else { n = Math.abs(n); } return new File(dir, prefix + Long.toString(n) + suffix); } } 

Este es el código en Java JDK que genera el nombre del archivo temporal. Puede ver que genera un número aleatorio y lo inserta en su nombre de archivo entre su prefijo y su sufijo. Esto está en “File.java” (en java.io). No vi ninguna forma de cambiar eso.

Usando Guava :

 import com.google.common.io.Files; ... File myTempFile = new File(Files.createTempDir(), "MySpecificName.png"); 

Si desea que se creen archivos con nombres específicos en el directorio temporal de todo el sistema, expanda la variable de entorno %temp% y cree el archivo manualmente, no hay problema con eso.

Editar: en realidad, use System.getProperty("java.io.tmpdir")); para eso.

Los nombres personalizados se pueden guardar de la siguiente manera

 File temp=new File(tempFile, ".xls"); if (!temp.exists()) { temp.createNewFile(); } 

Puede crear un directorio temporal y luego almacenar nuevos archivos en él. De esta forma, todos los archivos nuevos que agregue no tendrán una extensión aleatoria. Cuando haya terminado, todo lo que tiene que hacer es eliminar el directorio temporal que ha agregado.

 public static File createTempFile(String prefix, String suffix) { File parent = new File(System.getProperty("java.io.tmpdir")); File temp = new File(parent, prefix + suffix); if (temp.exists()) { temp.delete(); } try { temp.createNewFile(); } catch (IOException ex) { ex.printStackTrace(); } return temp; } public static File createTempDirectory(String fileName) { File parent = new File(System.getProperty("java.io.tmpdir")); File temp = new File(parent, fileName); if (temp.exists()) { temp.delete(); } temp.mkdir(); return temp; } 
 public static File createTempDirectory(String dirName) { File baseDir = new File(System.getProperty("java.io.tmpdir")); File tempDir = new File(baseDir, dirName); if (tempDir.mkdir()) { return tempDir; } return null; } 
    Intereting Posts