Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    21

    [JAVA] sort di una directory

    Avrei bisogno di visualizzare in una lista il contenuto di una directory sortata per nome. Il codice che sto utilizzndo è il seguente:

    File dir=new File("PERCORSO");

    File[] cont=dir.listFiles();

    int MAX=cont.length;

    for (int i = 0; i<MAX; i++)
    {
    String tmp=cont[i].getName();
    if ((tmp.endsWith(".B"))||(tmp.endsWith(".T")))
    {
    lista.add(tmp);
    }
    }
    La cartella contiene i seguenti file che vengono visulizzati in questo ordine:
    PXB01C01.RMICSE1.POSTEL.B
    QDT01C01.RMICSE1.POSTEL.T
    QDT01C01.RMICSE1.POSTEL.B
    PXB01C01.RMICSE1.POSTEL.T
    LRDN0408130001000.PRFE01.POSTEL.B.B

    mentre la mia esigenza sarebbe un ordinamento per nome a prescindere delle dimensioni degli stessi.
    Grazie

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    potresti usare:

    codice:
    ...
    Collections.sort(nomeLista);
    ...
    In questo modo la tua lista sarà in ordine alfabetico.



    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    21
    scusa l'enorme ignoranza ma come posso inserire la tua riga di codice?
    Ho provato nei modi seguenti:
    Collections.sort(lista);
    Collections.sort(cont);
    ottenendo il seguente risultato:

    cannot resolve symbol
    symbol : method sort (java.awt.List)
    location: class java.util.Collections
    Collections.sort(lista);
    ^
    1 error

    Ciao e grazie

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Per ordinare un vettore di stringhe puoi usare Collections.sort():

    codice:
    File dir = new File("C:" + File.separator + "windows");
    File[] cont = dir.listFiles();
    int MAX = cont.length;
    Vector lista = new Vector();
    for(int i = 0; i < MAX; i++){
    	String tmp = cont[i].getName();
    	if(tmp.toUpperCase().endsWith(".B") || tmp.toUpperCase().endsWith(".T")){
    		lista.add(tmp);
    	}
    }
    
    Collections.sort(lista);
    for(int i = 0; i < lista.size(); i++)
    	System.out.println(lista.get(i));

    Se vuoi considerare uguali nomi di file indipendentemente dalle maiuscole o minuscole dovresti trasformare il nome tutto in maiuscolo prima di fare il confronto con ".T" o ".B".

    Un modo più elegante per filtrare solo i file che ti interessano, e anche piu efficiente se devi filtrare in più punti è di usare un FilenameFilter che si occupa di accettare o meno un file in base ai criteri che stabilisci:

    codice:
    class MyFileFilter implements FilenameFilter{
    
    	public boolean accept(File f, String name){
    		//se non e' un file non lo accetto
    		if(! new File(f, name).isFile()){
    			return false;
    		}
    
    		//Se non termina con le estensioni che voglio no lo accetto
    		if(name.toUpperCase().endsWith(".T") || name.toUpperCase().endsWith(".EXE"))
    			return true;
    		else
    			return false;
    	}
    
    }
    
    
    //Quindi:
    
    
    File dir = new File("C:" + File.separator + "windows");
    String[] list = dir.list(new MyFileFilter());
    if(list == null){
    	System.out.println("Il percorso specificato non è una cartella");
    }
    Vector v = new Vector();
    for(int i = 0; i < list.length; i++)
    	v.add(list[i]);
    Collections.sort(v);
    for(int i = 0; i < v.size(); i++)
    	System.out.println(v.get(i));

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  5. #5
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da giof50
    scusa l'enorme ignoranza ma come posso inserire la tua riga di codice?
    Ho provato nei modi seguenti:
    Collections.sort(lista);
    Collections.sort(cont);
    ottenendo il seguente risultato:

    cannot resolve symbol
    symbol : method sort (java.awt.List)
    location: class java.util.Collections
    Collections.sort(lista);
    ^
    1 error

    Ciao e grazie
    Il parametro del metodo sort() deve essere un java.util.List (ad esempio un Vector come nell'esempio che ti ho postato), mentre tu passi una java.awt.List

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    21
    Tutto ok viene sortata la directory ma non riesco più a inserire o meglio visulizzare i vari elementi nella lista presente nella form.
    Ho modificato quanto inviatomi nel modo seguente:
    Vector listagio = new Vector();

    for(int i = 0; i < MAX; i++){
    String tmp = cont[i].getName();
    if(tmp.toUpperCase().endsWith(".B") || tmp.toUpperCase().endsWith(".T")){
    listagio.add(tmp);
    }
    }

    Collections.sort(listagio);
    for(int i = 0; i < listagio.size(); i++)
    {
    *******************la riga che và in errore**********
    lista.add (listagio.get(i));
    *****************
    System.out.println(listagio.get(i));
    }
    dove lista è dichiarata :
    List lista=new List(10,true);
    Grazie

  7. #7
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Sostituisci

    lista.add(listagio.get(i));

    con

    lista.add((String)listagio.get(i));

    questo perche un Vector restituisce gli oggetti come Object, indipendentemente dal fatto che siano delle stringhe, quindi devi convertire esplicitamente il tipo dell'oggetto ottenuto (cioè fare un cast).

    PS: quando hai un errore devi postare anche l'errore che ti dà il compilatore; inoltre usa il pulsante code per inserire il testo indentato.


    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    21
    Tutto OK!!!!!!!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.