View Full Version : [Java] Nome file con numeri random
DigitalKiller
20-04-2006, 18:54
Ragazzi ho un piccolo problema...
Devo generare un file il cui nome contenga una stringa da me assegnata ed un numero casuale. Ho fatto in questo modo:
nome = "tmpfile" + (int)(Math.random() * 1000);
ma c'è una discordanza tra il nome del file generato ed il contenuto della variabile.
Il file generato, cioè, ha questo nome tmpfile46045333, mentre la variabile contiene tmpfile460.
Come mai succede questo? :eek:
Dire che la ragione non è nella linea di codice che hai incollato.
Nel caso in cui tu stia usando altrove il metodo File.createTempFile, il nome del file generato è indeterminato: inizia con il prefisso specificato e termina con il suffisso indicato. In mezzo è fantasia :D.
DigitalKiller
20-04-2006, 19:24
Dire che la ragione non è nella linea di codice che hai incollato.
Nel caso in cui tu stia usando altrove il metodo File.createTempFile, il nome del file generato è indeterminato: inizia con il prefisso specificato e termina con il suffisso indicato. In mezzo è fantasia :D.
:confused: :mbe: Potresti essere più chiaro?
Questo è una parte del mio codice:
nome = "tmpfile" + (int)(Math.random() * 1000);
try {
......
tempPDF = File.createTempFile(nome, ".pdf");
tempPDF.deleteOnExit();
.....
La variabile nome non viene assolutamente modificata dopo il blocco try :(
Attraverso il metodo "createTempFile" chiedi alla piattaforma Java di generare un file temporaneo che inizi per "nome" (supponiamo "tmpfile443") e termini per ".pdf".
Secondo quanto dichiarato dal metodo createTempFile, ciò che ottieni è un file, collocato nell'ipotetica cartella che il sistema operativo dedica ai file temporanei .
Del file ottenuto sai che il suo nome inizia per "tmpfile443" e termina per ".pdf". La ragione per cui è possibile che il file abbia un nome con dei caratteri in più tra il prefisso (tmpfile443) e il suffisso (.pdf) risiede nella previsione che esista una sola cartella atta a contenere tutti i file temporanei del sistema operativo.
Per evitare di sovrascrivere altri file temporanei o di ottenere un rifiuto a fronte della richiesta, la piattaforma prevede che il sistema operativo, pur tenendo conto della necessità che il nome del file inizi per "tmpfile443" e termini per ".pdf", possa generare una stringa intermedia che garantisca l'univocità del nome.
Detto altrimenti, se crei un file "normale", il File è creato con il nome che gli imponi:
File file = new File("tmpfile443.pdf");
Se crei un file temporaneo non imponi il nome completo del file ma solo la parte iniziale e la parte finale:
File file = File.createTempFile("tmpfile443", ".pdf");
Il file restituito ha un nome che inizia per "tmpfile443", finisce per ".pdf" e in mezzo può avere dei caratteri in più, per distinguerlo da eventuali altri file, presenti nella cartella dei file temporanei, che altrimenti avrebbero lo stesso nome.
DigitalKiller
20-04-2006, 20:39
Ora è tutto più chiaro, grazie! :D
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.