Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442

    [Scanner] Input file da scanner

    Ciao a tutti,
    sto frequentando un corso universitario in cui fra le altre materie ho anche programmazione in java. Sono a buon punto ma non ho ancora finito quindi ogni tanto ho dei dubbi amletici.

    Per esempio devo fare un esercizio in cui mi si chiede di leggere un file di testo e fare certe operazioni sui dati letti. L'utente deve dare in input il nome del file e questa è la cosa che non mi riesce, perché mi continua a dire che il file non esiste (quando eseguo).
    Vi dico il codice usato (la parte che riguarda questa questione):

    codice:
    public static void caricaVoli(String nomeFile) throws FileNotFoundException
        {
          Scanner scan = new Scanner(new File(nomeFile));
            while(scan.hasNext())
             {
                 String idV = scan.next();
                blabla (altre righe come sopra)
                 voli.add(new Volo(idV, cittaP, aerpP, cittaD,compAerea, oraP, oraA));
             }
             scan.close(); //chiudo lo scanner
    [segue altro codice]

    Qui chiedo l'input all'utente:

    codice:
     public static void main(String[] args)
         {
             try
             {
                 Scanner scan = new Scanner(System.in);
                 System.out.print(" Inserisci nome File: " );
                 String nomeFile = scan.nextLine();
    In pratica mi dice sempre che il file non esiste .
    Ho provato a metterlo con l'estensione, senza, rispettando maiuscole e minuscole, niente. Ovviamente il file esiste e si trova nella stessa cartella delle classi.
    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Due cose per il debug:
    1) metti questa riga:
    System.out.println("Sto per aprire il file: " + nomeFile);
    in caricaVoli subito prima di:
    Scanner scan = new Scanner(new File(nomeFile));
    2) riporta qui l'output compresa l'eccezione completa che ti stampa java

    Ciao.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Ecco:

    Inserisci nome File: InfoVoli.dat
    Sto per aprire il file: InfoVoli.dat
    Il file java.io.FileNotFoundException: InfoVoli.dat (File o directory non esistente) non esiste

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    secondo me è un problema di "path" , quando l'utente inserisce il nome del file , esempio: ciao.txt , si presuppone che esso stia nella cartella dove risiede il programma avviato , in caso contrario (il file risiede in un'altra directory) non basta dirgli solo il nome ma è necessario passargli tutto il path..
    Ma non è più comodo far scegliere all'utente un file con il JFileChooser??


  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Sembra tutto ok,
    Forse il problema sta quando dici " il file esiste e si trova nella stessa cartella delle classi."
    Il file InfoVoli.dat si deve trovare nella stessa directory da cui avvii la vm java.
    Non hai specificato se usi uni IDE (Eclpise?) o usi la riga di comando.
    Se usi la riga di comando e lo avvii per dire con:
    c:\demo> java mioclasseprincipale
    il file deve stare in c:\demo
    Esempio per windows, idem per linux.

    @zipangulu si parla di un esercizio, magari non usa swing e comunque ci sta che anche un programma a riga di comando debba funzionare. Ovviamente se usa swing ed è un file che l'utente potrebbe voler scegliere a runtime certamente indicato JFileChooser.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    uso jedit come editor e lancio direttamente tramite i plugin di jedit... e ho appena scoperto grazie ai vostri suggerimenti che invece se lancio da riga di comando funziona. qualcuno ha un'idea del perché?

    @zipangulu sì è un esercizio puramente accademico, stiamo procedendo per gradi, chiaramente immagino ci saranno modi migliori e/o più comodi per fare la stessa cosa

    comuqnue grazie!

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da Jamie04
    qualcuno ha un'idea del perché?
    Sì: perchè tu non puoi sapere (a priori) qual è la directory corrente che usa jedit per avviare il programma. E se il tuo programma (come nel tuo caso) si aspetta di trovare il file nella directory corrente... beh, non puoi sapere a priori dove posizionare il file.

    E questo è uno dei primi errori in cui si incappa quando si fanno fare troppe cose agli editor (l'avvio del programma è una delle cose da non far fare all'editor).


    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
    Sep 2012
    Messaggi
    707
    Originariamente inviato da LeleFT
    E questo è uno dei primi errori in cui si incappa quando si fanno fare troppe cose agli editor (l'avvio del programma è una delle cose da non far fare all'editor).
    Questo non mi è chiaro.
    Io lancio SEMPRE il programma dall'ide, certo i programmi sono grandi di solito non un esercizio da scuola.
    1) il programma dipende magari da una infinità di librerie che magari cambiano
    durante la stesura del programma e dovrei stare a ricrearmi la cmdline ogni volta
    2) 1 volta su 3 magari faccio debug e dovrei eseguirlo un po' da dentro un po' da fuori.
    3) la comodtà di schiacciare un bottone ed eseguire il programma è mostruosa non vedo perché
    in fase di sviluppo dovrei eseguirlo da fuori.

    Quando lo sviluppo è finito e testato allora mi creo uno script bash o dos per l'avvio.

    Ma magari ho capito male io cosa intendevi.

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Io non lancio MAI il programma dall'IDE.
    Ho imparato, con l'esperienza, che spesso l'avvio dei programmi dall'IDE sono influenzati da diversi fattori:

    1) Gli IDE eseguono il pogramma usando la loro directory di lavoro: è sufficiente che, per errore, uno dei file di risorse sia stato spostato nella directory dei compilati perchè questo sia "correttamente" trovato durante l'esecuzione da IDE e poi, in produzione, il programma non funzioni più (caso avvenuto più di qualche volta anche in questo forum).

    2) Gli IDE eseguono il programma usando impostazioni che non sempre sono presenti in produzione (variabili d'ambiente esistenti solo localmente nel PC di sviluppo, librerie erroneamente linkate che si trovano nel CLASSPATH solo del PC di sviluppo, ecc).


    Senza contare che, il più delle volte, il PC in cui sviluppo l'applicazione non ha le risorse sufficienti per reggere tutto l'ambiente di sviluppo, tutti i programmi in esecuzione sulla mia macchina, e l'eseguibile da avviare. Insomma, io tendo a dividere l'ambiente di sviluppo dall'ambiente di test. Quest'ultimo deve essere il più aderente possibile all'ambiente di produzione (il ché, molto spesso, cozza con le esigenze dell'ambiente di sviluppo).


    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

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Originariamente inviato da LeleFT
    Io non lancio MAI il programma dall'IDE.
    Scusami ma ti assicuro che è la prima volta che lo sento.
    E quando devi usare il debugger?

    Riguardo al chiamare l'esecuzione fase di test:
    eseguire un programma parzialmente completato durante lo sviluppo fa parte ancora dell'ambiente di sviluppo.

    L'ambiente di test è quello quando il programma è si ancora da testare ma completo,
    nel qual caso verrà eseguito sicuramente fuori dall'de, tanto che i test farà probabilmente un'altra persona,
    spesso neanche programmatore.

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.