La mia piccola applicazione di utilità chiede all'utente una directory di output tramite un selettore di file GUI. Quindi crea molti file in questa directory di output dopo qualche elaborazione.Controllo dell'accesso in scrittura in una directory prima di creare file al suo interno
ho bisogno di controllare se l'applicazione ha accesso in scrittura in modo che informa l'utente e non non continuare con la lavorazione (che potrebbe richiedere molto tempo)
Il mio primo tentativo è stata la CanWrite() metodo di java.io.File. Ma questo non funziona poiché si occupa della stessa voce della directory e non del suo contenuto. Ho visto almeno un'istanza di una cartella di Windows XP che può essere rinominata o cancellata ma non è possibile creare alcun file (a causa delle autorizzazioni). Questo è in realtà il mio banco di prova.
finalmente si stabilirono con la seguente soluzione
//User places the input file in a directory and selects it from the GUI
//All output files will be created in the directory that contains the input file
File fileBrowse = chooser.getSelectedFile(); //chooser is a JFileChooser
File sample = new File(fileBrowse.getParent(),"empty.txt");
try
{
/*
* Create and delete a dummy file in order to check file permissions. Maybe
* there is a safer way for this check.
*/
sample.createNewFile();
sample.delete();
}
catch(IOException e)
{
//Error message shown to user. Operation is aborted
}
Tuttavia, questo non si sente elegante per me dal momento che cerca solo di creare effettivamente un file e controlla se l'operazione riesce.
Ho il sospetto che ci debba essere un modo migliore per questo, ma tutte le soluzioni che ho trovato fino ad ora con Security Manager e cose che riguardano le applet Java e non le applicazioni standalone. Mi manca qualcosa?
Qual è il modo consigliato di verificare l'accesso ai file all'interno di una directory prima che stia effettivamente scrivendo i file?
Sto usando Java 5.
Cosa succede se "empty.txt" esiste già? Quindi si finisce per cancellare un file che potrebbe essere stato importante. –
Sì, sarebbe meglio se il valore booleano restituito da createNewFile() fosse usato per capire se il file è stato effettivamente creato da no. – kazanaki