Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [Java] Output su file

  1. #1

    [Java] Output su file

    Ho scritto velocemente un programmino che mi permette di vedere le directory e sottodirectory:

    codice:
    import java.io.*;
    
    public class JavalistRec {
    	
    	
    	public static void lista (String args) throws IOException{
            File lista= new File (args);
            String[] s=lista.list();
            
            	System.out.println("\n====DIRECTORY: " + args + "===\n");
            
            	if (s.length==0)
            	System.out.println("non è stato trovato un parametro che soddisfi la richiesta");
            
            	for (int i=0; i<s.length;i++){
            	
            		System.out.println(s[i]);
            	
            	}
            
            	for (int j=0; j<s.length;j++){
            	
            		if (new File(s[j]).isDirectory()){
            		lista(s[j]);
            	
            		}     	
            	  }
            
    		}
    
    		
    		public static void main(String [] args){
    	
    
    
    		try{
    			lista(".");
    			}
    
    		catch(Exception e){
    	
    			System.out.println("Errore, non sono stati inseriti i parametri corretti");
    	
    			}
    
    		}
    }

    Ora vorrei stampare il risultati (gli stessi che stampo con il println) su un file txt, come potrei fare?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    1) Creare un oggetto PrintWriter agganciato ad un FileWriter.
    2) Passare tale oggetto al metodo lista()
    3) Usare il metodo println() del PrintWriter al posto del Syste.out.println
    4) Fare il flush() e la close() del PrintWriter prima della fine del programma (al ritorno dalla prima chiamata di lista() ).

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    grazie mille )

    Fatto cosi e funziona

    codice:
    import java.io.*;
    
    public class JavalistRec {
    	
    	
    	public static void lista (String args,PrintWriter out) throws IOException{
            File lista= new File (args);
            String[] s=lista.list();
    
     
            
            	System.out.println("\n====DIRECTORY: " + args + "===\n");
            
            
            
            	if (s.length==0)
            	System.out.println("non è stato trovato un parametro che soddisfi la richiesta");
            
            	for (int i=0; i<s.length;i++){
            		
            	    out.println(s[i]);
            		System.out.println(s[i]);
            	
            	}
            	
            
            	for (int j=0; j<s.length;j++){
            	
            		if (new File(s[j]).isDirectory()){
            		lista(s[j],out);
            		
            	
            		}     	
            	}
            
    		}
    
    		
    		public static void main(String [] args){
    	
    
    
    		try{
    			
    			PrintWriter out= new PrintWriter(new FileWriter ("prova.txt"));
    			lista(".", out);
    			out.flush();
    			out.close();
    			
    			}
    
    		catch(Exception e){
    	
    			System.out.println("Errore, non sono stati inseriti i parametri corretti");
    	
    			}
    
    		}
    
    }

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sì. Solo alcuni suggerimenti sul trattamento delle eccezioni

    1) Non ammazzare le eccezioni (se non in casi limiti)
    2) Prevedi sempre la possibilità che qualcosa vada storto e, di conseguenza, vada tutto ripulito.

    Da questo deriva il seguente schema per il trattamento delle eccezioni in ambito I/O:

    codice:
    // Dichiaro gli oggetti che andrò ad usare, separatamente
    // e li inizializzo esplicitamente a null
    PrintWriter out = null;
    FileWriter fw = null;
    
    // Apro il blocco try/catch/finally
    try {
       // Istanzio e uso gli oggetti, sempre su righe di codice separate
       fw = new FileWriter("pippo.txt");
       out = new PrintWriter( fw );
    
       ...   // Effettuo la mia elaborazione
    
       // Ho finito il lavoro.. faccio solo il flush()
       out.flush();
    } catch (Exception e) {
       // Si è verificata un'eccezione: ne stampo lo stackTrace
       e.printStackTrace();
       ...   // Posso anche stampare informazioni aggiuntive
    } finally {
       // Questo blocco viene sempre eseguito, anche in caso di eccezioni o return
       // Questo è un buon posto dove fare le chiusure
       if (out != null) {
          try { out.close(); } catch (Exception e) { /* eccezione in chiusura, non posso farci nulla */ }
       } else {
          if (fw != null) {
             try { fw.close(); } catch (Exception e) { /* come sopra */ }
          }
       }
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Grazie ancora,

    guardando le possibili classi mi sono accorto che sono presenti anche:

    BufferedOutputStream e FileOutputStream

    Che differenza c'è tra queste due e BufferedWriter e FileWriter?

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da jackdispade
    Grazie ancora,

    guardando le possibili classi mi sono accorto che sono presenti anche:

    BufferedOutputStream e FileOutputStream

    Che differenza c'è tra queste due e BufferedWriter e FileWriter?
    InputStream e OutputStream sono dedicati all'I/O in byte, mentre i Reader/Writer si utilizzano per l'I/O in caratteri.
    Le versioni "File" sono ovviamente orientate a fare le suddette operazioni su file.
    Le versioni "Buffered" contengono per l'appunto un buffer che migliora le prestazioni. Di solito per utilizzare queste classi si passa al loro costruttore lo stream che si vuole bufferizzare).

    I tutorial Java contengono molte informazioni a riguardo, ma anche ovunque sul web puoi trovarne.

    P.S.: non è sempre necessario invocare flush sui PrintWriter, di default lo fanno da soli dopo ogni println, printf o format. Inoltre se si ha a disposizione Java 7 si può usare anche il costrutto try-with-resources, dagli un'occhiata.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Kaamos
    P.S.: non è sempre necessario invocare flush sui PrintWriter, di default lo fanno da soli dopo ogni println, printf o format.
    No.
    Come da specifica del costruttore:

    PrintWriter(File file)
    Creates a new PrintWriter, without automatic line flushing, with the specified file.
    Non so se da Java7 abbiano cambiato le cose, non lo uso (ancora)...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da LeleFT
    No.
    Come da specifica del costruttore:



    Non so se da Java7 abbiano cambiato le cose, non lo uso (ancora)...


    Ciao.
    No non è cambiato hai ragione tu. Ed ero anche andato a leggere, ma ho letto "with"

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.