manejo - write to a file in java
¿Cómo crear un archivo temporal en java sin el número aleatorio añadido al nombre del archivo? (7)
Los nombres personalizados se pueden guardar de la siguiente manera
File temp=new File(tempFile, ".xls");
if (!temp.exists()) {
temp.createNewFile();
}
Necesito crear un archivo temporal, así que intenté 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();
}
}
La salida 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 extra (long int) que se agregan al nombre del archivo. ¿Cómo puedo lograr eso? Gracias
No puedes si usas File.createTempFile
para generar un nombre de archivo temporal. Miré la fuente java para generar un archivo temporal (para java 1.7, no dijiste tu versión, así que solo usé la mía):
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 el JDK de Java 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 sufijo. Esto está en "File.java" (en java.io). No vi ninguna forma de cambiar eso.
Primero, use el siguiente fragmento de código 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.
Puede crear un directorio temporal y luego almacenar nuevos archivos en él. De esta manera, 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 agregó.
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;
}
Si desea archivos con nombres específicos creados en el directorio temporal de todo el sistema, expanda la variable de entorno %temp%
y cree el archivo manualmente, no hay nada de malo en ello.
Edición: En realidad, use System.getProperty("java.io.tmpdir"));
para eso.
Utilizando Guava :
import com.google.common.io.Files;
...
File myTempFile = new File(Files.createTempDir(), "MySpecificName.png");
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;
}