que los directorio cómo crear convertir como archivos archivo abrirlo abren java file file-io

java - los - Cómo crear un nombre de archivo tmp sin crear un archivo



que es un archivo tmp en android (7)

Escribo aplicaciones en Java usando SWT. Me gustaría crear un nombre de archivo único. Pero no quiero crearlo en el disco duro. Funcionalidad adicional: deseo crear un nombre de archivo único en la carpeta especificada.

public String getUniqueFileName(String directory, String extension) { //create unique file name }


Otra version,

Simplificado las otras respuestas, use GUID . no necesito agregar sal al UUID . Esto es lo que estoy usando:

public static String getUniqueFileName(String directory, String extension) { String fileName = MessageFormat.format("{0}.{1}", UUID.randomUUID(), extension.trim()); return Paths.get(directory, fileName).toString(); }

  • tenga en cuenta que el archivo no se está creando, esta función solo devuelve un nombre de archivo único como cadena

uso:

String uniqueFileName = getUniqueFileName("/tmp", "pdf"); System.out.println(uniqueFileName);

salida

/tmp/f34a960a-6001-44d6-9aa7-93ec6647a64a.pdf


De su pregunta, supongo que ha visto que File.createTempFile() siempre crea un archivo en lugar de solo permitirle generar el nombre.

Pero, ¿por qué no simplemente llamar al método y luego eliminar el archivo temporal creado? createTempFile() hace todo el trabajo para encontrar un nombre de archivo único en el directorio especificado y desde que creó el archivo, puede estar seguro de que también lo eliminará.

File f = File.createTempFile("prefix",null,myDir); String filename = f.getName(); f.delete();



Puede crear un archivo con cualquier nombre (hora, GUID, etc.) y luego probarlo para ver si ya existe. Si lo hace, pruebe con otro nombre para ver si es único.

File f = new File(guid); if (f.exists()) { //try another guid }else{ //you''re good to go }



Use una marca de tiempo en el nombre del archivo?

Por supuesto, esto puede no funcionar si tienes una concurrencia muy alta.

Por ejemplo:

public String getUniqueFileName(String directory, String extension) { return new File(directory, new StringBuilder().append("prefix") .append(date.getTime()).append(UUID.randomUUID()) .append(".").append(extension).toString()).getAbsolutePath(); }

COMO lo sugiere la respuesta de John Oxley. http://java.sun.com/j2se/1.5.0/docs/api/java/util/UUID.html puede ser una solución ya que puedes usar 4 esquemas diferentes para crearlos. Aunque todavía hay una pequeña posibilidad de una colisión. Si combina una marca de tiempo con un UUID aleatorio, las posibilidades de una colisión se hacen infinitamente pequeñas.


puede crear un directorio único real (subdirectorio) y luego cualquier archivo dentro de él debe ser único, por ejemplo "myFile". + extensión

public static String getUniqueFileName(String directory, String extension) { try { // create actual unique subdirectory in the given directory // File myUniqueDir = File.createTempFile("udir", null,directory); String filename = myUniqueDir.getName(); myUniqueDir.delete (); // don''t want the file but a directory myUniqueDir.mkdirs (); } //todo: catch .... // for example: return directory + "/" + myUniqueDir + "/myFile." + extension; }

este procedimiento debería funcionar en escenarios normales incluso con concurrencia. A menos que comencemos a pensar en procesos sniffer que quieran ocupar nuestro nuevo directorio o cosas similares.