Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Gestione Input Output

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    38

    Gestione Input Output

    salve,
    è corretto il seguente frammento di codice(deve prendere in input un valore intero, un float ed una stringa da tastiera e scriverli su un file):
    http://pastebin.com/AkPHhUqp
    C'è un modo più semplice di questo?
    grazie

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Il while(true) non si può proprio vedere, ci sono modi decisamente migliori e più eleganti per fare ciò (tipo un do-while con una condizione di uscita opportuna).

    Devi proprio usare il BufferedReader? Perché con Scanner te la caveresti più facilmente...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    38
    Potresti dirmi perchè conviene utilizzare scanner piuttosto che bufferedReader? E' da poco che sto studiando l'IO di java (sono abbastanza confuso )
    grazie per la risposta

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da earl
    Potresti dirmi perchè conviene utilizzare scanner piuttosto che bufferedReader? E' da poco che sto studiando l'IO di java (sono abbastanza confuso )
    grazie per la risposta
    Perché Scanner è ad un livello un po' più alto di BufferedReader. E Scanner ha metodi per leggere interi, double, stringhe ecc mentre BufferedReader legge solo stringhe.

    La javadoc è piuttosto esaustiva
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    38
    ok, ho sistemato il codice seguenfo i tuoi consigli.
    Ho due dubbi:
    Dove dovrei chiudere il flusso di informazioni di scanner?
    Per l'output invece è preferibile utilizzare la classe PrintWriter o BufferedWriter ?
    Grazie ancora dei chiarimenti

  6. #6
    Ti consiglio alla fine del writer di inserire anche la seguente istruzione:

    writer.flush();

    che garantisce l'immediata scrittura sul disco dal buffer e poi pulisce quest'ultimo.

    Ciao
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    38
    scusa,
    non ho inserito il codice che ho corretto nel messaggio precedente.
    http://pastebin.com/QZDuZALb

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da earl
    ok, ho sistemato il codice seguenfo i tuoi consigli.
    Ho due dubbi:
    Dove dovrei chiudere il flusso di informazioni di scanner?
    Per l'output invece è preferibile utilizzare la classe PrintWriter o BufferedWriter ?
    Grazie ancora dei chiarimenti
    Non serve creare un nuovo Scanner ad ogni nuovo inserimento.

    Exception è troppo generica come eccezione, se quello che inserisci non è convertibile nel tipo richiesto mi pare che venga sollevata una InputMismatchException.

    Ti consiglio di non usare il TAB per indentare ma di usare gli spazi (1 tab = 4 spazi ad esempio), più "uniformi" della tabulazione

    Per l'output potresti usare direttamente il FileWriter, senza decorarlo
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    38
    Quindi, dici che è meglio passare l'oggetto in di tipo scanner ad ogni metodo piuttosto che creare un nuovo oggetto Scanner in ognuno di essi?
    Per le eccezioni: quindi è più corretto scrivere tutti i blocchi catch con le relative eccezioni piuttosto che un unico catch (con un'eccezione generica) in cui faccio la stampa di e.toString?
    Per decorare intendi l'uso di PrintWriter?
    grazie ancora dei chiarimenti

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da earl
    Quindi, dici che è meglio passare l'oggetto in di tipo scanner ad ogni metodo piuttosto che creare un nuovo oggetto Scanner in ognuno di essi?
    In questo caso crereei un unico Scanner a livello di classe (static come i metodi), che verrà quindi usato da tutti.


    Originariamente inviato da earl
    Per le eccezioni: quindi è più corretto scrivere tutti i blocchi catch con le relative eccezioni piuttosto che un unico catch (con un'eccezione generica) in cui faccio la stampa di e.toString?
    In questo caso va bene anche Exception ma in un contesto reale potresti aver bisogno di sapere quale errore è capitato tra i mille che possono capire (ma anche lì, non è detto che sia necessario catturare l'eccezion, magari conviene più rilanciarla ma non è questo il caso: ora ti basta un semplice messaggio che spiega cosa è successo).

    codice:
    ...
        private static Scanner scanner = new Scanner(System.in);
    
        public static int insertInt() {
    	int num = 0;
    	boolean ok = false;
    
    	do {
    	    try {
    		System.out.print("Inserisci un valore intero: ");
    		num = scanner.nextInt();
    		ok = true;
    	    } catch (Exception ex) {
    		System.out.println("Il valore inserito non e\' un intero valido.");
    	    }
    	} while (!ok);
    
    	return num;
        }
    ...


    Originariamente inviato da earl
    Per decorare intendi l'uso di PrintWriter?
    grazie ancora dei chiarimenti
    Esatto. Nel package java.io si usa molto il pattern "decorator".

    Ad esempio, per leggere un file puoi usare FileReader (che legge carattere per carattere). Però puoi inserirlo in un BufferedReader per aggiungere un buffer alla lettura, in pratica "decori" l'oggetto originale
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.