Visualizzazione dei risultati da 1 a 4 su 4

Discussione: scansione file

  1. #1

    scansione file

    Salve, vorrei con java realizzare la scansione dell'intero sistema, per cercare un particolare file.
    Ho considerato anche la probabilità che l'utente abbia più hdd, e quindi il programma deve scansionarli tutti. Ovviamente sarà un codice ricorsivo, ma forse è proprio per questo che non riesco a svilupparlo correttamente.
    Ecco il codice che dovrà essere richiamato con mio_cerca.cerca_file();
    codice:
    package applicazione;
    
    import java.io.File;
    import java.io.IOException;
    
    import javax.swing.JOptionPane;
    
    import com.sun.net.httpserver.Filter;
    
    //ideato per trovare i file di esecuzione di broswer già installati sul pc di ki utilizzerà il programma
    //quindi non mi interessa memorizzare i risultati in un file ma mi interessa
    //scanzionare il sistema alla ricera dei file
    //se trovati allora li apre
    //altrimenti avvisa che non cè nessun broswer, selezionato dall'utente, installato sul pc
    public class mio_cerca {
    	private static File from;
    	static File[] files;
    	static String[] directory={"C:\\","D:\\","E:\\","F:\\","G:\\"};
    	 
    	 public static void cerca_file() throws IOException{
    		 for(int i=0; i<=directory.length-1;i++){//for che cambia le directory
    	 from = new File(directory[i]);
    	 //nome del file da cercare. Ad esempio cerco un file di nome pippo inserirò pippo
         //se non specificato cercherà tutti i file con qualsiasi nome
          //  String nome = "";
          //estensione del file da cercare. Ad esempio *.mp3 inseriro .mp3
            //se non specificato cercherà tutti i files con qualsiasi estensione
            //String tipo = ".exe";
    	
            //se non esiste allora fare la scansione in d,e,f nel caso in cui esistano hdd aggiuntivi
            //cerca_file per tutti i file superficiali ovvero tutti i files
            //prendi ciascun files e cerca al suo interno
            //devo cambiare i file lasciando gli altri perchè mi servono per cercare nelle altre directory superficiali
    	 //ricorsivo ! devo cambiare i file ogni volta
    	  files = from.listFiles();
    	 cerca_(files);
    	
           //ok non funzia perchà non è ricorsivo
    }//fine for per cambiare le directory c,d,e,f
    		 JOptionPane.showMessageDialog(null,"non hai installato questo broswer sul tuo pc");
    	        
    		 }
    	 
    	 
         public static void cerca_(File[] files) throws IOException{
        //prende le directory superficiali. di ciascuna di queste bisogna prendere quelle sottostanti
         for (int j = 0; j < files.length; j++) {
         	if(files[j].getName()==("firefox.exe"))//LO DEVE3 ESEGUIRE
         		{System.out.println("nel vero"+files[j].getName());
         		Runtime rt=Runtime.getRuntime();
         		Process proc=rt.exec("firefox.exe");
         		
         		}
         	System.out.println("nel falso"+files[j].getName());
         	
         }
         }
         public void cambia_files(int i) throws IOException{
    //il fattore dinamico è files
        	 
             File[] files1= files[i].listFiles();
             cerca_(files1);
             for(int z=0;z<=files1.length;z++)cambia_files(z);
             }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    347
    Ciao,
    ho capito che hai qualche problema sul metodo ricorsio.
    Non sono molto entrato nel tuo caso particolare ma ho scritto un esempio di ricorsione per vedere la lista di tutti i tuoi files e dirctorys(e sottodirectory) così magari lo puoi utilizzare come spunto per farci la tua logica.
    (Mi dispiace se la formattazione dell'output non è molto chiara ma non avevo molto tempo )

    codice:
    package test;
    
    import java.io.File;
    
    public class CercaFileInModoRicorsivo {
    
    	static private File root = new File("c:/nn");
    	static private File[] figli = null;
    
    	public static void scanRot(File padre, int livello) {
    		if (padre.isDirectory()){
    			System.out.println("("+padre.getParent()+")  DIR --> Livello: " + livello++ + "  : " + padre.getName());
    			 figli = padre.listFiles();
    			 for(File figlio : figli)
    				 scanRot(figlio, livello);
    		} else System.out.println("("+padre.getParent()+")  File --> Livello: " + livello++ + "  : " + padre.getName());
    	}
    
    	public static void main(String[] args) {
    		scanRot(root, 0);
    	}
    
    }
    cmq controlli se è una dir
    se è dir ti fai dare la lista dei figli.
    per ogni figlio vedi
    se è dir --> ripassi il File (che è una dir) al metodo
    altrimenti (cioè è un File non dir) lo stampi (fine).

    per il test la mia root non parte da c: ma te puoi farlo partire da dove vuoi.

    spero di esserti stato d'aiuto.
    nh

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

    Re: scansione file

    Originariamente inviato da allmystery
    Ovviamente sarà un codice ricorsivo, ma forse è proprio per questo che non riesco a svilupparlo correttamente.
    Ecco il codice che dovrà essere richiamato con mio_cerca.cerca_file();
    A parte che il codice, così come l'hai postato, è decisamente poco chiaro e molto fumoso.

    A parte il confronto inappropriato files[j].getName()==("firefox.exe") che non dà il risultato voluto (la uguaglianza di stringhe e oggetti in generale si verifica con equals() ... non con == che invece si basa sui reference e quindi è una uguaglianza di "identità" e non di "contenuto").

    A parte tutto questo, una scansione del file-system con una tecnica "ricorsiva" non è affatto difficile e il seguente è un metodo semplice e chiaro che si potrebbe usare:

    codice:
    public void scansionaDirectory(File dir) throws IOException {
        File[] elementi = dir.listFiles();
    
        if (elementi == null) {
            throw new IOException("Errore lista entry per " + dir);
        }
    
        for (int i = 0; i < elementi.length; i++) {
            File file = elementi[i];
    
            if (file.isDirectory()) {
                scansionaDirectory(file);    // ricorsione
            } else {
                //
                // .... qui usa il file ....
                //
            }
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    fantastico! grazie mille!

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.