Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    34

    [aiuto] JFileChooser e selezione ricorsiva file

    Salve!

    Sto realizzando un'applicazione in java per la gestione degli mp3.

    Tramite un JFileChooser ho realizzato l'importazione di un singolo file nella mia libreria.
    Una volta importato il file poi ho un metodo che legge i vari tag ID3v2 e li salva in determinate variabili, inserisce tutto in una JTabel nella mia GUI ecc..questo non ci interessa, funziona..:P

    Il problema e': tramite lo stesso filechooser ho aggiunto la possibilita' di selezionare intere cartelle oltre che singoli file per rendere piu' rapida l'importazione della tipica cartella "musica" che tutti abbiamo nella home..
    La domanda che segue e' dunque: come posso fare per leggere tutti i file con estensione .mp3 nella cartella selezionata (e ricorsivamente in eventuali sue sottocartelle), mettermeli magari in un array di tipo File[] per poi poterci chiamare sopra uno ad uno il metodo che legge i tag e inserisce i file nella JTabel?

    Spero di aver chiarito il succo del problema..

    Ringrazio tutti quelli che risponderanno!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [aiuto] JFileChooser e selezione ricorsiva file

    Originariamente inviato da stefo_11
    come posso fare per leggere tutti i file con estensione .mp3 nella cartella selezionata (e ricorsivamente in eventuali sue sottocartelle)
    JFileChooser non te lo fa ... nel senso che lui al massimo ti dà un File o File[] (per più file/directory selezionati allo stesso livello).

    Se vuoi scansionare tu il file-system in "profondità", devi farlo tu appositamente, sfruttando i list()/listFiles() di java.io.File e usando un approccio tipicamente "ricorsivo" (un metodo che richiama sé stesso). E nessuno ti vieta di collezionare tutti i nomi di file che ti interessano in un unico contenitore come ad esempio un ArrayList.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    34
    Capito, grazie mille..

    Quindi, in pratica, devo fare una cosa tipo:
    (mi sono rifatto ai tuoi esempi che metti in firma, davvero troppo utili^^)

    codice:
            File dir = new File(".");
              FileExtFilter fef = new FileExtFilter("txt");
              String[] files = dir.list(fef);
    Con questo mi creo l'array di stringhe con i nomi dei file contenuti nella cartella.

    Poi sarebbe carino che tutto questo fosse fatto in un metodo che ritorna appunto il vettore di stringhe files, che io passo al metodo per la lettura dei tag, facendo risultare una cosa simile:

    codice:
    for(int i =0;i<files.lenght();i++) {
    
            File mia_song =files[i];
            try {
                    MP3File f = (MP3File)AudioFileIO.read(mia_song);
                    eccetera..
    }
    Ha senso?

    L'unica domanda (se cio' detto fin'ora ha sensoXD altrimenti di domande ne sorgon altre) ora e': ho impostato la directory corrente con File dir = new File(".");, per impostare le sottodirectory come devo fare? Una volta impostatala poi torno a chiamar questo metodo che lavora su ".", mi sfugge solo il modo per entrare in una sottodirectory di cui non so a prescindere il nome..(per farla semplice, . e' la dir corrente, .. e' la dir immediatamente sopra, la dir padre..la dir figlia come si fa..?)

    Ancora grazie mille!

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    34
    Up..
    Mmmh, funziona perfettamente con la scansione degli mp3 in una cartella, ma anche guardando la documentazione non riesco proprio a capire come rendere il tutto ricorsivo alle sottocartelle..
    O meglio, per farlo bastera' chiamare lo stesso metodo che ho creato per scansionare la cartella corrente solo passandogli le sottocartelle, una ad una..ma come posso farlo?

    Grazie mille!!

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da stefo_11
    O meglio, per farlo bastera' chiamare lo stesso metodo che ho creato per scansionare la cartella corrente solo passandogli le sottocartelle, una ad una..ma come posso farlo?
    Il metodo riceve un File che fa riferimento ad una directory. Nel metodo elenchi tutti i file nella directory e li "elabori" (nel senso che ci fai quello che avevi in mente di fare) e poi elenchi tutte le directory presenti nella directory. Per ogni directory invochi ricorsivamente il metodo passando la directory.

    Dal punto di vista concettuale si può decidere se fare prima tutti file poi tutte le directory, oppure il contrario oppure in modo mescolato secondo l'ordine delle entry (che è system-dependent). Chiaramente quale approccio scegliere dipende da cosa si deve fare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    34
    Capito, chiarissimo, grazie mille..
    A questo punto ho un array di file del tipo:
    File[] array_file = dir.listFIles();
    in cui ho sia file mp3 sia cartelle ma potenzialmente anche file che non sono ne' l'uno ne' l'altro..
    Sarebbe ottimo poter fare i seguenti controlli:

    if(array_file[i].isDirectory()) ---> gestisco ricorsivamente la directory
    if(array_file[i].isFileMp3()) ---> chiamo il metodo di catalogazione del file mp3
    else do nothing

    Il problema e' che un metodo .isFileMp3() non esiste^^
    Fino ad ora creavo l'array_file chiamando il metodo dir.listFiles(myfilefilter) dove il filtro e' impostato ai soli .mp3, ma ora non posso fare lo stesso o perdo le directory..

    Come posso fare per escludere i file che non sono ne' mp3 ne' cartelle quindi?

    Grazie mille per la disponibilita'

    Edit: le cartelle hanno estensione? in quel caso potrei creare un secondo filtro e tutto sarebbe immediato..ma non sono sicuro di questa cosa, anzi mi sembra una bestialita'XD inoltre se l'avessero sarebbe SO dependent? il programma che faccio deve girare indipendentemente su win, linux e mac..

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da stefo_11
    Il problema e' che un metodo .isFileMp3() non esiste^^
    Ovvio, troppo specifico!

    Originariamente inviato da stefo_11
    Fino ad ora creavo l'array_file chiamando il metodo dir.listFiles(myfilefilter) dove il filtro e' impostato ai soli .mp3, ma ora non posso fare lo stesso o perdo le directory..
    Come ho già detto, gli approcci possono essere diversi: o ottieni 2 liste e implementi 2 filtri (un filtro solo directory e un filtro solo file .mp3) oppure ottieni una unica lista e determini tu cosa è (insomma, fai un filtro "a mano", anche se effettivamente potresti sfruttare un FileFilter).

    Originariamente inviato da stefo_11
    Come posso fare per escludere i file che non sono ne' mp3 ne' cartelle quindi?
    dato un File f;

    codice:
    if (f.isDirectory()) {
        ....
    } else if (f.isFile() && f.getName().endsWith(".mp3")) {
        ....
    }
    Il secondo test è banale: se è un file e il nome termina con .mp3

    Originariamente inviato da stefo_11
    Edit: le cartelle hanno estensione?
    Le cartelle possono avere qualunque nome, anche con una estensione (anche se è raro). Ma il concetto della estensione è quello di dare un significato (ed eventualmente una "associazione" nel sistema) ai file, non alle directory.
    Quindi che una directory abbia o no una estensione, non dovresti curartene (e quindi non presupporre che abbia o meno una estensione).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    34


    funge^^

    grazie mille davvero!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.