Java: výber súborov v adresári, po zadaní napr. *.txt

Programovacie jazyky, rady, poradňa...
petanorech
Light Star
Light Star
Príspevky: 205
Registrovaný: 08 jan 2006, 20:47

Java: výber súborov v adresári, po zadaní napr. *.txt

Príspevok od používateľa petanorech »

Ahojte,
mám program, kde vyberá používateľ súbory na spracovávanie, a môže ich vybrať aj tak, že napíše *.txt alebo *.*

Teraz ale neviem, či existuje nejaká metóda, ktorá by vedela spracovať takýto vstup. Našiel som v Java API, pri objekte File, metódy listFiles a listFiles(FileFilter filter), len neviem, či je to to správne. Odskúšať to zatiaľ nemám ako, pretože viacerí robíme jednu triedu.

Ak by už niekto mal skúsenosti s niečím takýmto, bol by som veľmi vďačný za pomoc.
pheo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 212
Registrovaný: 20 sep 2005, 16:53
Bydlisko: moje hniezdo
Kontaktovať používateľa:

Príspevok od používateľa pheo »

Použitie filtra sa my zdá najrozumnejšie, čo sa však týka parseru tých výrazov , o žiadnom neviem, program nie je ale tažké urobit, taký na rýchlo je tu :

Kód: Vybrať všetko


import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;


/**
 *
 * Ukážka filtrovania
 */
public class Filtrujeme {
    public static final String FILES_ALL = ".";
    public static final String FILES_ALL_TXT = "*.txt";
    public static final String FILES_TXT = ".txt";
    
    
    /**
     * Hlavná metóda, predvádzajúca filtrovanie.
     * @param args Vstupné paramatre: 0 filter; 1 cesta k priečinku.
     */
    public static void main(String[] args) {
        String in = args[0].toLowerCase();
        File directory  = new File(args[1]);
        try {
            ArrayList<File> files = filtruj(directory, in);
            System.out.print("DIRECTORY: ");
            System.out.println(directory.getAbsolutePath());
            System.out.println("============================");
            
            for(File f : files) {
                System.out.println(f.getName());
            }
            
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
    /**
     * Odfiltruje súbory podľa výberu.
     * @param priecinok referencia na aktuálny pričinok
     * @param filter filetr výber
     * @return Vráti vždy ArrayList , v prípade chyby prázdny arraylist
     */
    public static  ArrayList<File> filtruj(File priecinok, String filter) {
        ArrayList<File> zoznam =  new ArrayList<File>(0);
        if(!priecinok.isDirectory()) {return zoznam;}
        
        if(filter.equalsIgnoreCase(FILES_ALL_TXT)) {
            File[] listFiles = priecinok.listFiles(new FileFilter() {

                public boolean accept(File pathname) {
                    return pathname.getName().endsWith(FILES_TXT);
                }
            });
           zoznam.addAll(Arrays.asList(listFiles));
           
           
        } else if(filter.equalsIgnoreCase(FILES_ALL)) {
            File[] listFiles = priecinok.listFiles(new FileFilter() {

                public boolean accept(File pathname) {
                    return pathname.isFile();
                }
            });
           zoznam.addAll(Arrays.asList(listFiles));
        }
        
        return zoznam;
        
    }
    
    
}


petanorech
Light Star
Light Star
Príspevky: 205
Registrovaný: 08 jan 2006, 20:47

Príspevok od používateľa petanorech »

dikes moc, výborný programík, dosť som z neho pochopil :)
Napísať odpoveď