La questione innanzitutto è su cosa basarsi. La tua applicazione potrebbe girare su Windows, su Linux, su Mac ... non lo so. Quindi: a) non puoi schiantare un path assoluto nel codice, b) non puoi pensare di poter scrivere ovunque ti pare sul disco.
Generalmente è tipico basarsi sulla "home" directory dell'utente, che è un concetto generico e presente su credo tutti i sistemi (non ho esperienza personale con i Mac ma la home directory esiste di certo anche lì).
Sotto la home directory molte applicazioni tipicamente tengono dati e configurazioni varie. E tipico che una applicazione crei sotto la home una directory con nome nella forma .nomeapp (nota il punto iniziale). Sotto questa, la applicazione mette e struttura file e directory come gli pare.
In Java la home directory si rintraccia con la System property "user.home". A livello di codice bastano poche righe:
codice:File appConfDir = new File(System.getProperty("user.home", ".nometuaapp"); File appImagesDir = new File(appConfDir, "images"); appImagesDir.mkdirs();
mkdirs() assicura che la catena di directory venga creata (se una o più cartelle non esistessero). Nota: restituisce un boolean, andrebbe testato.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ho inserito quel codice nel main ed effettivamente mi ha creato la cartella images nella cartella col mio nome utente. Al posto di .nometuaapp ho messo .discipline ma questa invece dove sta? Io appena apro utente vedo solo images. Comunque adesso che ho la mia directory, nel momento in cui aggiungo una nuova disciplina, la mia immagine deve finire l� e da l� deve essere caricata, corretto?
Ora, io col filechooser seleziono l'immagine e la copio in images, ma mi serve il percorso di images per poterlo fare... Come lo ricavo? Non posso mettere il mio perch� sarebbe appunto diverso per altri utenti... Grazie ancora
Scusa ... vedo adesso, ho scritto al volo il codice prima ma manca una parentesi
Questo è corretto:
File appConfDir = new File(System.getProperty("user.home"), ".nometuaapp");
File appImagesDir = new File(appConfDir, "images");
appImagesDir.mkdirs();
P.S. cerca anche di capire il senso di queste costruzioni di File.
L'utente con il file chooser ti può specificare un qualunque percorso ad una immagine, potenzialmente ovunque nel file-system (o addirittura da altro disco). Spetta a TE copiare il file immagine nella "images" nota alla applicazione.
C'è solo una questione: le immagini staranno TUTTE direttamente nella images o pensi di strutturarle tramite una qualche logica di suddivisione per directory?? Questo idem spetta a TE.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Sisi mi ero accorta della parentesi e avevo sistemato. Le mie domande sono 2:
1) .discipline cosa rappresenta? cioè mentre images è la cartella che viene creata nel mio percorso utente, discipline invece dove sta? cosa è?
2) sisi come hai detto tu uso un filechooser che mi seleziona l'immagine che si può trovare ovunque, poi io prendo quel file e lo devo copiare nella cartella images e lo so fare solo che mi serve il percorso di images, come lo ricavo? Mi serve proprio il percorso.
Comunque rispondendo alla tua domanda, voglio mettere tutte le immagini delle discipline dentro images e basta, non voglio complicare le cose, anche perchè sono le uniche immagini che può gestire l'utente, il resto è fisso.
Su Windows la home di un utente è qualcosa es. C:\Users\Andrea
Quindi con il pezzo di codice mostrato, otterresti una directory es.:
C:\Users\Andrea\.discipline\images
Sotto la home ci possono essere svariate cartelle .qualcosa (di altre applicazioni). Quindi un .discipline distingue la TUA applicazione. Sotto la tua directory, ovviamente ci fai e metti quello che vuoi. E una "images" può essere inutile o utile a seconda di cosa eventualmente altro ci potresti voler mettere.
Il pezzo di codice che ti ho mostrato ti fornisce un java.io.File (che è solo un pathname) della directory "images".
Questo lo puoi usare per creare un altro File che rappresenta un file composto con:
File imgFile = new File(appImagesDir, "blabla.png");
Ovviamente "blabla.png" è come esempio. Nel tuo caso il nome base+estensione ti arriverà dal file chooser.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Grazie infinite, ci sono riuscita! Mi sono resa conto della grandissima cretinata che avevo detto nel post iniziale! Grazie ancora per la tua disponibilita'![]()