Ciao,
devo generare file con nomi sempre diversi per evitare sovrascrizioni ed evitare anche di fare controlli per vedere se il file gia' esiste. (Il sistema deve salvare moltissimi file)
Come posso fare?
CiaoCiao!
![]()
Ciao,
devo generare file con nomi sempre diversi per evitare sovrascrizioni ed evitare anche di fare controlli per vedere se il file gia' esiste. (Il sistema deve salvare moltissimi file)
Come posso fare?
CiaoCiao!
![]()
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMddHHmmss");
String time = sdf.format(new java.util.Date());
double r = Math.random();
String name = time + ((int)(r*1000));
questo potrebbe andare e basta configurare il numero 1000 in base a quanto deve essere sicuro
Hai alcune alternative: puoi creare dei file il cui nome sia un numero, oppure, creare dei nomi in cui ci sia un prefisso (ad esempio "file") seguito da un numero. Ovviamente i numeri dovrebbero essere sempre crescenti, per evitare il problema dei doppioni.
Supponendo, ora, che tu scelga di creare dei file il cui nome è un numero, potresti ottenere il numero successivo (per il prossimo file da creare) in questo modo:
[list=1][*]Ottieni l'elenco dei file contenuti nella directory[*]Leggi il nome dell'ultimo file[*]Converti questo nome in numero[*]Aggiungi 1 a questo numero[/list=1]
Questo semplice codice dovrebbe essere sufficiente a fare quanto detto:
Le righe in grassetto meritano alcune considerazioni: ad esempio, puoi associare un'estensione ai file. In questo caso devi preoccuparti prima di rimuoverla prima di parsare il numero e di aggiungerla nel nome del prossimo file da creare (il codice sotto fa anche questo lavoro).codice:File dir = new File("nome_della_dir_che_contiene_i_file"); File [] contenuti = dir.listFiles(); String nomeUltimoFile = contenuti[contenuti.length-1].getName(); int valore = Integer.parseInt(nomeUltimoFile); String nomeProssimoFile = "" + (valore + 1);
Altre soluzioni consistono nell'usare gli insiemi (interfaccia Set di java.util), con caratteri casuali...codice:// Supponiamo che tutti i file abbiano estensione ".TXT" String nomeUltimoFile = contenuti[contenuti.length-1].getName(); int posEstensione = nomeUltimoFile.lastIndexOf(".TXT"); nomeUltimoFile = nomeUltimoFile.substring(0, posEstensione); int valore = Integer.parseInt(nomeUltimoFile); String nomeProssimoFile = "" + (valore + 1) + ".TXT;
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Potresti comporre il nome del file mettendo in "append" come suffisso System.currentTimeMillis(), oppure un identificativo id numerico che incrementi di volta in volta... Potrebbe essere una sequence del tuo database che crei allo scopo; oppure, se non disponi di sequence sul db, potresti semplicemente avere una tabella di due soli campi, un id (numerico) e un lock_flag (stringa(1)), che contiene l'ultimo valore utilizzato.
Ogni volta che scrivi un file:
controlli che lock_flag valga 'N' [se vale Y fai una semplice sleep e poi riprovi];
aggiorni lock_flag a 'Y';
prelevi il valore;
lo incrementi;
lo salvi sul db incrementato;
lo usi per creare il file;
In realtà le scelte possono essere tante, dipende dalla fantasia del coder![]()
ops, forse ci ho messo un pò troppo a scrivere il post![]()